首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当字符串相等时,strcmp结果为false

当字符串相等时,strcmp结果为false
EN

Stack Overflow用户
提问于 2012-11-14 21:56:18
回答 2查看 1.1K关注 0票数 0

这是我的代码:

代码语言:javascript
运行
复制
        if(strcmp(pch,map[i].name)==0){
            printf("Equal\n");
            return 0;
        }

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

file11111111111111111111111111111111111111111111111111111111111

代码语言:javascript
运行
复制
file11111111111111111111111111111111111111111111111111111111111

每件事都很棒,结果和预期的一样,但当这两个(大小为64)进行比较时:

file111111111111111111111111111111111111111111111111111111111111

代码语言:javascript
运行
复制
file111111111111111111111111111111111111111111111111111111111111

返回值为false。我想要做的是:

代码语言:javascript
运行
复制
        if(strncmp(pch,map[i].name,64)==0){
            printf("Equal\n");
            return 0;
        }

它确实适用于确切大小为64的字符串,但对于较小的字符串,结果是随机的。我在这里处理的是哪种奇怪的事情?

编辑:这是完整的代码:

代码语言:javascript
运行
复制
    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, ",");
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-14 21:58:55

好吧,如果它是

代码语言:javascript
运行
复制
char pch[64];

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

还有一点,说strcmp()返回"false“是错误的,因为它的返回值不是布尔值。它返回前两个不同字符之间的关系;如果没有不同的字符,则字符串相等,则返回零。

票数 9
EN

Stack Overflow用户

发布于 2012-11-14 21:58:42

如果一个或两个数组的大小恰好为64,则缺少字符串结尾的最后一个'\0‘。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13380181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档