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