在C中使用strcmp()会遇到麻烦

时间:2013-10-17 06:04:16

标签: c strtok strcmp

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从原始字符串中读取星号。我不明白为什么它永远不会遇到这种情况。

4 个答案:

答案 0 :(得分:5)

您的*令牌可能还包含您输入的\n字符以完成输入。将单个字符与以下字符之一进行比较:

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

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

或将\n添加到您的分隔符列表中:

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

答案 1 :(得分:0)

因为fgets将换行符嵌入到变量mystr中。这是在放弃比较。尝试从变量中删除“\ n”。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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