当我在下一个代码部分使用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函数strcspn
和strspn
而不是strtok
来查找子字符串。