2013-10-17 75 views
2
char* mystr = calloc(25, sizeof(char)); 
fgets(mystr, 25, stdin); // I enter "6 7 *" in here, without the quotes 

char* tok; 
tok = strtok(mystr, " "); 
while (tok != NULL) { 
    if(strcmp(tok, "*") == 0) 
     //It never meets this condition, but I don't understand why 
    else 
     //do something else here 
    tok = strtok(NULL, " "); 
} 

的问题是,strcmp(tok, "*")不会返回作为平等的,即使tok从原始字符串的星号读取。我不明白为什么它永远不符合这个条件。麻烦的strcmp(c)中

+1

'sizeof(char)'是'1'。 –

+0

了解如何使用调试器(如'gdb')。也许试着'strncmp(tok,“*”,1)' –

+1

逐行扫描调试器中的代码,并逐行查看'strtok'返回的内容。 –

回答

5

您的*令牌很可能还包含您输入的\n字符以完成输入。由于与fgets被嵌入换行符到变量myStr中

tok = strtok(NULL, " \n"); 
+0

编辑:现在得到它的工作,谢谢 – user2889150

+0

我刚刚使用你的确切程序,这两个变化修复它很好。你不能让我们看到重要的东西。 –

+0

是的,我搞砸了。 '如果(tok [0] =='*')'工作,谢谢 – user2889150

0

:要么用一个比较单个字符:

if(tok[0] == '*') 

    if(strncmp(tok, "*", 1) == 0) 

或添加\n到您的分隔符列表。这抛弃了比较。尝试从变量中删除“\ n”。

0

strcmp()比较两个字符串。您必须提供*作为带终止字符"*\n"的字符串。

if(strcmp(tok, "*\n") == 0) 
0

您的另一个输入。 strtok()不是线程安全的。使用时要小心。如果你有多个线程(为了某种目的调用strtok()),使用strtok_r()。