这是我的代码:
if(strcmp(pch,map[i].name)==0){
printf("Equal\n");
return 0;
}pch是从文件中读取的,map[i].name的已知大小为64。这对于小于64的字符串非常有效。当比较这两个大小为63的字符串时:
file11111111111111111111111111111111111111111111111111111111111和
file11111111111111111111111111111111111111111111111111111111111每件事都很棒,结果和预期的一样,但当这两个(大小为64)进行比较时:
file111111111111111111111111111111111111111111111111111111111111和
file111111111111111111111111111111111111111111111111111111111111返回值为false。我想要做的是:
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, ",");
}发布于 2012-11-14 21:58:55
好吧,如果它是
char pch[64];那么你不能有64个可见的字符,因为最后一个条目是终止所需要的。如果数组中有"file111111111111111111111111111111111111111111111111111111111111",那么它不会终止,在它上调用strcmp()会调用未定义的行为。
还有一点,说strcmp()返回"false“是错误的,因为它的返回值不是布尔值。它返回前两个不同字符之间的关系;如果没有不同的字符,则字符串相等,则返回零。
https://stackoverflow.com/questions/13380181
复制相似问题