C で簡単なシェル プログラムを作成しています。プログラムの一部として、ユーザー入力をトークンに分割するトークナイザーを作成しています。トークナイザーが呼び出されるたびに、次のトークンが返されます。トークナイザーのコードは次のようになります。
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);
}
}
このようにプログラムを実行すると、「プット」が正しく機能します。つまり、関数が呼び出されるたびに、次のように適切なトークンが正しい順序で出力されます。
cpgm 1 2 < 3 | スクリプト a b > ファイル
ただし、次のように、nextToken の「puts」行を削除してメイン関数に配置すると、次のようになります。
while(*token!='\0')
{
puts(token);
token = nextToken(inputString);
}
代わりにメイン関数からトークンを出力しようとすると、次のような奇妙な文字のリストが表示されます。
?bHD? 「bH」「bH」「bHd」「bHd?」
� � � � bHd?
なぜこれが起こっているのですか?
ありがとう。