2013-07-27 17 views
-1

我正在尝试使用strtok()。以下是我写的一段代码。它不起作用,但无限制地打印", '"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()手册页的代码,它工作得很好。

​​

我觉得我做了完全一样的事情。无法找出我的代码中的错误。有人可以指出。

+0

重复标记此问题是完全错误的!在这个问题中,OP忘记了编码中​​函数的名称,并且因为','逗号运算符的行为没有产生错误而链接问题是关于运算符的行为。 –

回答

10

有趣的bug!你忘记了功能名称。注意里面while循环体下面的表达式:

tokens = (NULL, ",'"); 
     ^
      'strtok' missing 

应该是:

tokens = strtok(NULL, ",'"); 

有趣的是,这是不是一个编译错误,其实:

tokens = (NULL, ",'"); 

是一个等于的有效表达式:

tokens = ",'"; 

(注:NULL有没有副作用)

阅读:Comma Operator: ,

逗号运算,left-to-right associativity。用逗号分隔的两个表达式 从左到右进行计算。左侧操作数始终为 ,所有副作用在right operand is evaluated之前完成。

由于括号()= RHS,评估后,操作者右手操作","被分配到token。而且因为token从来没有分配过NULL所以while(tokens != NULL)永不休息,这就是你无限期获得","的原因!

+0

感谢兄弟,galti se错误ho gaya。 :)。 samajh nahi aa raha tha kya galti hai,所以我贴 – nish

+2

@naka没问题,欢迎您!其明显的错误:) - 重要的是要了解为什么编译 –

+0

@naka谢谢娜卡! –