2011-10-28 40 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));