c-如何将空指针取消引用为字符串



我当前正在尝试将字符串复制到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指针时没有遇到内存问题。然后,当我尝试打印复制的字符串时,出现了seg错误,如下所示。

printf("Updated DataEntry : %sn", *(ST_CHAR*) DataEntry->userInfo);

有人能指出为什么当我只是打印字符串时会出现segfault吗?

这:

DataEntry->userInfo = safe_malloc(sizeof(ST_CHAR)*strlen(ps8tmp+1));

有两个问题:

  1. 在为字符串分配空间时不要使用sizeof(char);它总是1,除非你有一些16位字符之类的异国情调
  2. strlen()的用法似乎被破坏了,您在括号内添加,它将在减去第一个字符的字符串上调用strlen()。如果字符串为空,这将给出未定义的行为。你的意思是strlen(ps8tmp) + 1

最新更新