English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

...include等等都省略不寫...
int main()
{
......其它沒關的宣告省略....
gets(UserSentence);//讀入個句子
char seps[]={' '};//要切除的部分
char token[100];
int j=0;//token計數器
token[j]=strtok(UserSentence,seps);//※
while(token[j]!=NULL)
{
j++;
token[j]=strtok(NULL,seps);
}//while

return 0;
}//main()
上面註解※的那一行..有編譯錯誤->'=':cannot convert from 'char*'to'char' ...不知怎麼辦?明明我就沒宣告char *的變數...還有這個token[]陣列我沒辦法用strcpy和別的字串比耶... 搞很久了...麻煩各位高手指點!!

2006-12-27 16:13:46 · 3 個解答 · 發問者 Wei 1 in 電腦與網際網路 程式設計

3 個解答

token[j] 是 char
strtok 傳回的是 char *
用法參
http://tw.knowledge.yahoo.com/question/question?qid=1006121500873
或在 知識+ 搜 strtok 就可

2006-12-27 23:42:44 補充:
你 token 陣列是要做什麼用?
通常不用把它 copy 走!
strtok 會在原位置幫你處理好。

你要懂 strtok 的工作方式(不用懂原理)才有用。
你若只要程式能跑,像浮雲的改法,應該能解決你99%的問題。
1%在哪?
要是你的原句被切超過 100 個 token,就...

所以,建議你了解一下 strtok 是在做什麼。

2006-12-27 17:25:21 · answer #1 · answered by ? 7 · 0 0

事實上,把程式這樣改:
gets(UserSentence);//讀入個句子

char seps[]={' '};
chat* token; // <---------- 改這
int j=0;//token計數器
token=strtok(UserSentence,seps);//※
while(token!=NULL) // <---------- 改這
{
j++;
token=strtok(NULL,seps); // <---------- 改這
}//while

這才是 strtok 的正式用法,而 strtok 的運算方式如下:
你第一次呼叫 strtok(UserSentence, seps) 時,你第一個參數傳的是一個在記憶體中的字串… strtok 會記錄這一個字串,並從第一個字元向後找,看有沒有 seps 中的字元…
要是找到的話,他會在原字串的記憶體中把該字元的位置換成 '\0' (就是結束字串的意思),並回傳這一個被更改的字串…
你第二次呼叫 strtok(NULL, seps) 時,你第一個參數傳的是 NULL… 所以 strtok 就會從上次呼叫 strtok 時回傳的位置,再開始向後找,看有沒有 seps 中的字元…
所以 strtok 回傳的是一個 char 指標,指到原 UserSentence 裡面的位置… 而你呼叫了 strtok 後,你原本的 UserSentence 也會被 strtok 摧毀掉… (會被加了一大堆的 \0)
而也因為 strtok 會直接修改來源字串的記憶體,你不可以像下面這樣用 strtok:
strtok("This is a constant string", " ");
因為來源的字串是 constant 字串,所以 strtok 無法直接修改這一個字串 (它需要更換字元到 \0)…
----
再教你解讀一下你 compiler 的 error message: cannot convert from 'char*' to 'char'…
這是因為 strtok 回傳的是 char*,而你要把 strtok 回傳的這一個 char*,存到 token[i]… 但 token[i] 是一個 char (token 是 char 陣列,而 token[i] 是陣列裡的其中一個,所以是 char)
所以 compiler 是在跟你說,它沒法把 strtok 的 char* 自動傳換成 char 來放到 token[i] 中…

2006-12-30 06:16:16 · answer #2 · answered by Dave 7 · 0 0

跟你說明一下,
char token[100];
只是宣告一個字串(或稱為字元陣列),
照你的前後文看來,
你需要的是一個字串陣列,
所以只要把
char token[100];
改成
char *token[100];
就可以了。

2007-01-03 20:11:21 補充:
Jacob Lee, dave 兩位大大:

你們的回答都非常正確,
不過,其實讓發問者混淆應該是 c 語言的字串、字元陣列、字元指標、字串陣列到底有何不同。

2006-12-27 17:38:10 · answer #3 · answered by Anonymous · 0 0

fedest.com, questions and answers