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

我当前正在尝试将字符串复制到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);

有人能指出为什么我只打印字符串时会出现段错误吗?

shaliang8 回答:如何将空指针作为字符串取消引用

此:

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

有两个问题:

  1. 在为字符串分配空间时不要使用sizeof(char);除非您使用明显的16位字符或其他东西进行特殊处理,否则它始终为1。
  2. strlen()用法似乎已损坏,您要在括号内添加 ,它将在字符串减去第一个字符的情况下调用strlen()。如果字符串为空,将产生未定义的行为。您的意思是strlen(ps8tmp) + 1
本文链接:https://www.f2er.com/2591504.html

大家都在问