无法比较令牌
我做了一个代码来使用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'
,并将一个干净的令牌传递给您。