昨天我的功能有問題,原來是一個簡單的修復,現在我有一個不同的問題,它令我莫名其妙。該函數是一個標記:問題與strtok只保存第一個令牌
void tokenizer(FILE *file, struct Set *set) {
int nbytes = 100;
int bytesread;
char *buffer;
char *token;
buffer = (char *) malloc(nbytes + 1);
while((bytesread = getLine(&buffer,&nbytes,file)) != -1) {
token = strtok(buffer," ");
while(token != NULL) {
add(set,token);
token = strtok(NULL," ");
}
}
}
我知道輸入(文本文件),是因爲在第二while循環我可以添加的printf(「%S」,令牌)得到破碎成令牌正確地顯示每個令牌。但是,問題在於添加。它只是將第一個標記添加到我的列表中,但同時仍然正確地分解每個標記。例如,如果我輸入的文本是「嗒嗒HERP DERP」我會得到
令牌=等等
令牌= HERP
令牌= DERP
但名單將只包含第一令牌,等等。我不相信這個問題是與補充,因爲它適用於自己的,也就是說我可以用
add(set,"blah");
add(set,"herp");
add(set,"derp");
,其結果將是一個包含所有三個單詞的列表。
謝謝你的幫助!
'add'看起來像什麼? – Yuliy 2011-03-27 18:24:53
你可以發佈'add(set,token)'方法的代碼嗎? – pajton 2011-03-27 18:25:31
'buffer =(char *)malloc(nbytes + 1);''不需要劇組,你永遠不會釋放相關的內存:) – pmg 2011-03-27 18:35:17