C-为什么我会倾倒分段故障核心



当我在下一个代码部分使用strtok时,我会倾倒分段故障核心。该代码正在调试,但是当我运行时,我会得到分段故障。我该如何修复?

struct{ char *name;
void(*func)(void);
}cmd[]={
{"read_cm",read_cm},
{"NA",NULL}
};
int d;
char *s="_n";
  char *token2;
  for(d=0;cmd[d].func!=NULL;d++)
   {
   token2=strtok((cmd[d].name),s);
}

您不得修改字符串文字。任何修改字符串字面的尝试导致不确定的行为。

标准C函数strtok试图在将字符串分解为子字符串时插入终止零。

解决问题的方法使用字符阵列而不是指针name。或动态分配内存,然后将字符串复制到指向指向的分配内存name

例如

struct
{ 
    char name[8];
    void(*func)(void);
} cmd[] = 
{
    { "read_cm", read_cm },
    { "NA", NULL }
};

另一种方法是使用标准C函数strcspnstrspn而不是strtok来查找子字符串。

相关内容

  • 没有找到相关文章

最新更新