这是我的代码:
if(strcmp(pch,map[i].name)==0){
printf("Equal\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
pch从文件中读取,map[i].name已知大小为64.这适用于小于64的字符串.当比较大小为63的以下两个字符串时:
file11111111111111111111111111111111111111111111111111111111111 和
file11111111111111111111111111111111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
一切都是桃子,预期的结果是相同的,但是当比较这两个(大小为64)时:
file111111111111111111111111111111111111111111111111111111111111 和
file111111111111111111111111111111111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
回报是假的.我想到了:
if(strncmp(pch,map[i].name,64)==0){
printf("Equal\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它适用于精确大小为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, ",");
}
Run Code Online (Sandbox Code Playgroud)
好吧,如果是的话
char pch[64];
Run Code Online (Sandbox Code Playgroud)
那么你不能有64个可见字符,因为终止需要最后一个条目.如果你确实"file111111111111111111111111111111111111111111111111111111111111"在那个数组中,它没有被终止,并且调用strcmp()它会调用未定义的行为.
另外,作为一个小问题,说strcmp()返回"false"是错误的,因为它的返回不是布尔值.它返回两个第一个不同字符之间的关系; 如果没有字符不同,字符串相等,则返回零.
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |