当字符串相等时,strcmp会导致false

这是我的代码:

if(strcmp(pch,map[i].name)==0){ printf("Equal\n"); return 0; } 

pch是从文件中读取的, map[i].name的已知大小为64.这对于小于64的字符串非常有用。当比较以下大小为63的字符串时:

file11111111111111111111111111111111111111111111111111111111111

 file11111111111111111111111111111111111111111111111111111111111 

一切都是桃子,预期的结果是相同的,但当这两个(大小为64)进行比较时:

file111111111111111111111111111111111111111111111111111111111111

 file111111111111111111111111111111111111111111111111111111111111 

回报是假的。 我想到了:

  if(strncmp(pch,map[i].name,64)==0){ printf("Equal\n"); return 0; } 

它适用于精确大小为64的字符串,但对于较小的字符串,结果是随机的。 我在这里处理什么样的怪癖?

编辑:这是完整的代码:

  char * pch; char tempFilesNeeded[100*64+100]; strcpy(tempFilesNeeded,map[i].filesNeeded); pch = strtok(tempFilesNeeded,","); while (pch != NULL) { if(strcmp(pch,map[i].name)==0){ printf("Equal\n"); return 0; } pch = strtok (NULL, ","); } 

好吧,如果是的话

 char pch[64]; 

那么你不能有64个可见字符,因为终止需要最后一个条目。 如果你在该数组中有"file111111111111111111111111111111111111111111111111111111111111" ,它就不会终止,并且在它上面调用strcmp()会调用未定义的行为。

另外,作为一个小问题,说strcmp()返回“false”是错误的,因为它的返回不是 boolean。 它返回两个第一个不同字符之间的关系; 如果没有字符不同,字符串相等,则返回零。

如果您的一个或两个数组的确切大小为64,那么您将错过结束该字符串的最后一个’\ 0’。