我目前正在尝试将字符串复制到void指针。这是我正在使用的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)
;除非您使用显式的16位字符或其他东西进行特殊处理,否则它始终为1。strlen()
用法似乎已损坏,您要添加inside括号,它将在字符串减第一个字符时调用strlen()
。如果字符串为空,将产生未定义的行为。您的意思是strlen(ps8tmp) + 1
。