1
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”

4

2 回答 2

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));
于 2011-10-28T17:08:55.160 回答
-1

您必须检查并查看第一次调用 strtok,即 strtok(but, " ,") 是否返回 NULL,如果返回,则下一次调用 strtok 将终止。你在 buf 中传递给 ParseCmdX 的具体内容是什么?

于 2011-10-28T15:00:16.583 回答