我正在用 C 编写一个简单的 shell 程序。作为程序的一部分,我正在编写一个标记器来将用户输入分解为标记。每次调用标记器时,它都会返回下一个标记。标记器的代码如下所示:
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 一二 < 三 | 脚本 a b > 文件
但是,当我删除 nextToken 中的“puts”行并将其放入主函数时,如下所示:
while(*token!='\0')
{
puts(token);
token = nextToken(inputString);
}
并尝试从我的主函数中打印令牌,我所看到的只是一个奇怪字符的列表,如下所示:
£bHd? �bH �bH � �bHd � �bHd?
� � 还
知道为什么会这样吗?
谢谢。