无法比较令牌

我做了一个代码来使用C来标记文件中的数据。如果当前令牌等于SIOL我想打印一些数据。 我的问题是strcmp不起作用。 你能发现任何错误吗? 这是代码。 谢谢您的帮助

 int main() { FILE* fp; char line[1024]; char *val1; fp = fopen("sample1.txt" , "r"); while (fgets(line, sizeof(line), fp) != NULL) { val1 = strtok(line, " "); if (strcmp(val1,"SIOL")==0) { printf("Sucess!"); return 0; } else { while(val1) { printf("%s\n", val1); val1=strtok(NULL, " "); } } } } 

像这样的sample1.txt:

 HAHA SIOL Hello World! SIOL 123 4 345 65 756 867 789797 Hello World 

您的实现中的问题是它没有正确处理\n

fgets遇到'\n'字符时,它会将其作为字符串的一部分返回。 因此,当您进行标记时,文件中的两个"SIOL"字符串将作为"SIOL\n"返回到您的程序,因为它们都位于字符串的末尾。 strcmp不认为"SIOL""SIOL\n"彼此相等,因此它返回非零值。

要解决此问题,请将'\n'添加到程序接受的分隔符列表中:

 val1 = strtok(line, " \n"); // change the second call of strtok as well 

这将确保strtok消除令牌末尾的'\n' ,并将一个干净的令牌传递给您。