char *ParseCmdX(char *buf,int len)
{
char *p;
p = strtok(buf," ,");
p = strtok(NULL," ,");
char *ptr = (char *)malloc(strlen(p)+1);
strcpy(ptr,p);
return ptr;
}
为什么我在p = strtok(NULL," ,");
收到了访问冲突错误?
当我输入NULL参数时,它会中断...
buf就像“das sdg hfg jgh”
答案 0 :(得分:1)
你是如何调用此函数的,以及如何分配buf?记住buf不能是只读的或const(strtok会在调用时更改输入缓冲区)。
这很有效,因为x是可以改变的:
char x[] = "das sdg hfg jgh";
char *c = ParseCmdX(x, strlen(x));
然而,这是一个错误:
char *y = "das sdg hfg jgh";
char *c = ParseCmdX(y, strlen(y));
答案 1 :(得分:-1)
你必须检查并查看第一次调用strtok,即strtok(但是,“,”)是否返回NULL,如果是,那么下一次调用strtok就会死掉。具体到底是什么传递给buf中的ParseCmdX?