我正在用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