Strtok用法,代码不能正常工作
我正在尝试使用strtok()
。 以下是我写的一段代码。 它不起作用,但无限打印", '"
。
#include #include #include 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 #include 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; }
我觉得我做的完全一样。 无法弄清楚我的代码中的错误。 请有人指出。
有趣的bug! 你忘记了function名称。 请注意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)
永远不会中断,这就是你无限地获得","
的原因!