我正在用C編寫一個簡單的shell程序。作爲程序的一部分,我正在編寫一個標記器以將用戶輸入分解爲標記。每次調用標記器時,都會返回下一個標記。標記器的代碼如下所示:打印字符串從C函數返回爲char *
char* nextToken(char string[])
{
char token[50]= {}; //stores the current token
//More code here, will post if necessary
puts(token);
return token;
}
int main()
{
char inputString[] = "cpgm one two <three| script a b >file";
char *token = nextToken(inputString);
while(*token!='\0') //I'm using a char[] with a single null character as a delimiter to indicate the last token has been reached
{
token = nextToken(inputString);
}
}
當我像這樣運行程序時,「puts」工作正常;也就是說,每個函數被調用時,相應的標記,印在正確的順序時,是這樣的:
cpgm 一個 < | 腳本 一個 b > 文件
然而,當我刪除了「看跌期權」行中的nextToken,並把它的主要功能,如:
while(*token!='\0')
{
puts(token);
token = nextToken(inputString);
}
,並嘗試打印令牌從我的主要功能,而不是我看到的奇怪字符列表,如下所示:
bHd? bH bH bHd bHd?
BHD?
任何想法爲什麼會發生這種情況?
謝謝。
或'static char token [50]' – Jack
哇,謝謝!有效!我一直在想這個好幾個小時! – tmldwn