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从原始字符串中读取星号,也永远不会返回相等。我不明白为什么它永远不会满足这个条件。

4

4 回答 4

5

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

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

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

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

  tok = strtok(NULL, " \n");
于 2013-10-17T06:11:01.847 回答
0

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

于 2013-10-17T06:17:37.420 回答
0

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

if(strcmp(tok, "*\n") == 0)
于 2013-10-17T06:18:17.263 回答
0

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

于 2013-10-17T06:32:14.210 回答