字符串相等时,strcmp结果为false
这是我的代码:字符串相等时,strcmp结果为false,c,C,这是我的代码: if(strcmp(pch,map[i].name)==0){ printf("Equal\n"); return 0; } pch是从文件map[i]中读取的。name的已知大小为64。 这对于小于64的字符串非常有效。比较以下大小为63的两个字符串时: file11111111111111111111111111111111111111111111111111 file1111111111111
if(strcmp(pch,map[i].name)==0){
printf("Equal\n");
return 0;
}
pch
是从文件map[i]中读取的。name
的已知大小为64。
这对于小于64的字符串非常有效。比较以下大小为63的两个字符串时:
file11111111111111111111111111111111111111111111111111
file11111111111111111111111111111111111111111111111111111111111
file111111111111111111111111111111111111111111111111111111111111
一切都很美好,结果与预期一样,但当比较这两个(尺寸64)时:
file111111111111111111111111111111111111111111111111
file11111111111111111111111111111111111111111111111111111111111
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, ",");
}
如果一个或两个数组的确切大小为64,则缺少字符串结尾的最后一个“\0”。如果是
char pch[64];
因为终止需要最后一个条目,所以不能有64个可见字符。如果该数组中确实有“file111111111111111111111111111111111111”
,则该数组不会终止,对其调用strcmp()
将调用未定义的行为
另外,作为一个次要的观点,说
strcmp()
返回“false”是错误的,因为它的返回值不是布尔值。它返回前两个不同字符之间的关系;如果没有字符不同,字符串相等,则返回零。@Tom“map[i]。name的已知大小为64”,因此他的点仍然有效。@Tom您不能将64字符长度的字符串放入64长度的字符数组中。