C ++ strtok无法获得2个令牌Borland

时间:2011-10-28 14:57:19

标签: c++ c++builder strtok

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”

2 个答案:

答案 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?