2011-10-28 44 views
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参数...С++ strtok无法获得2令牌Borland

BUF是像 “DAS SDG HFG JGH” 水木清华

谁能帮助我?

+0

是什么在 “BUF” 的值是什么样子? – Joe

+0

“das gfd jgh khh” - buf – Hakon89

+0

@Hak你把这个标记为C++,但你使用的是'malloc','char *'和'strcpy'。是否有这样的理由,而不是使用字符串和智能指针? – greatwolf

回答

0

你必须检查并看看第一次调用strtok,即strtok(但是,“,”)是否返回NULL,如果没有,那么下一次调用strtok会死。具体是什么你传递给buf中的ParseCmdX?

+0

为什么它应该返回NULL?如果我把字符串像“asd hfdkj gdhk fhjsk” – Hakon89

+0

我做了检查,它仍然崩溃成AV错误 – Hakon89

+1

艾哈迈德是完全正确的。对于“das sdg hfg jgh”在其中没有“,”,所以p是NULL。一旦p为空,没有其他东西可以返回,所以下一个strtok调用将从字符串的末尾移开。 Bang,鼻恶魔无处不在:) – EvilTeach

0

你是怎么调用这个函数的,怎么分配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));