我正在尝试使用strtok()
。以下是我写的一段代码。它不起作用,但无限地打印", '"
。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char str[]="this, by the way, is a 'sample'";
char *tokens;
tokens = strtok(str, ", '");
//printf("%s\n",tokens);
//printf("%s\n", str);
while(tokens!=NULL)
{
printf("%s\n", tokens);
tokens = (NULL, ", '");
}
return 0;
}
以下是strtok()
手册页中的代码,完全正常。
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
return 0;
}
我觉得我做的完全一样。无法弄清楚我的代码中的错误。请有人指出。
答案 0 :(得分:10)
有趣的错误!你忘记了功能名称。请注意while循环体内的表达式:
tokens = (NULL, ",'");
^
'strtok' missing
应该是:
tokens = strtok(NULL, ",'");
有趣的是,不是编译错误,实际上是:
tokens = (NULL, ",'");
是一个有效的表达式,它等于:
tokens = ",'";
(注意:NULL
没有副作用)
逗号运算符
,
有left-to-right associativity
。两个表达 用逗号分隔从左到右进行评估。左操作数是 总是进行评估,所有副作用都在right operand is evaluated
之前完成。
由于括号(
)
位于=
的rhs,在评估,
后,操作员右手操作数","
被分配给token
。而且token
从未分配NULL
,因此while(tokens != NULL)
永远不会中断,这就是您无限期获得","
的原因!