Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串相等时,strcmp结果为false_C - Fatal编程技术网

字符串相等时,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长度的字符数组中。