[英]How to dereference a void pointer as a string
我目前正在尝试将字符串复制到 void 指针。 这是我正在使用的空指针结构。
typedef struct
{
struct runtime_type *runtimeTypeHead; /* Array of Runtime Types */
ST_INT numRuntimeTypes; /* # of Runtime Types in array */
ST_CHAR *dataBuf; /* ptr to local data */
ST_VOID *userInfo; /* To store anything user wants.*/
/* GSE code does not use it. */
} GSE_IEC_DATA_ENTRY;
如您所见,我正在使用 userInfo。
我已经分配了内存并使用了 memcpy,如下面的代码所示。
DataEntry->userInfo = safe_malloc(sizeof(ST_CHAR)*strlen(ps8tmp+1));
memcpy((ST_CHAR*)DataEntry->userInfo, ps8tmp,strlen(ps8tmp));
我想我在将字符串复制到 void 指针时没有遇到内存问题。 然后,当我尝试打印复制的字符串时,我遇到了段错误,如下所示。
printf("Updated DataEntry : %s\n", *(ST_CHAR*) DataEntry->userInfo);
谁能指出为什么我只是打印字符串时会出现段错误?
这个:
DataEntry->userInfo = safe_malloc(sizeof(ST_CHAR)*strlen(ps8tmp+1));
有两个问题:
sizeof(char)
; 它始终为 1,除非您有一些带有显式 16 位字符或其他东西的异国情调。strlen()
的使用似乎坏了,你是在括号内添加,它会调用strlen()
上的串减去第一个字符。 如果字符串为空,这将给出未定义的行为。 你的意思是strlen(ps8tmp) + 1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.