我正在尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)
以下是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;
}
Run Code Online (Sandbox Code Playgroud)
我觉得我做的完全一样.无法弄清楚我的代码中的错误.请有人指出.
Gri*_*han 10
有趣的bug!你忘记了功能名称.请注意while循环体跟随表达式:
tokens = (NULL, ",'");
^
'strtok' missing
Run Code Online (Sandbox Code Playgroud)
应该:
tokens = strtok(NULL, ",'");
Run Code Online (Sandbox Code Playgroud)
有趣的是,这不是编译错误,事实上:
tokens = (NULL, ",'");
Run Code Online (Sandbox Code Playgroud)
是一个有效的表达式,它等于:
tokens = ",'";
Run Code Online (Sandbox Code Playgroud)
(注意:NULL没有副作用)
阅读:逗号运营商:,
逗号运算符
,有left-to-right associativity.用逗号分隔的两个表达式从左到右进行计算.始终评估左操作数,并且所有副作用都在之前完成right operand is evaluated.
由于( )rhs的括号=,在评估,操作符右侧操作数"," 被赋值后token.而且因为token从未分配过,NULL所以while(tokens != NULL)从不打破,这就是你","无限期的原因!