| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 519 人关注过本帖
标题:关于strncmp的疑问
只看楼主 加入收藏
ybyc9999
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2015-1-24
结帖率:90%
收藏
已结贴  问题点数:10 回复次数:4 
关于strncmp的疑问
程序如下:
#include <stdio.h>
#include <string.h>

int main(void){
    /*定义三个内容相似的字符串*/
    char str1[]="long time";
    char str2[]="long time";
    char str3[]="lonG time";

    int length=strlen(str1);

    /*分别输出三个字符串的内容*/
    printf("str1=\"%s\"\n",str1);
    printf("str2=\"%s\"\n",str2);
    printf("str3=\"%s\"\n",str3);

    /*演示strncmp函数的使用*/
    printf("strncmp(str1,str2,%d)=%d\n",
         length,strncmp(str1,str2,length));

    printf("strncmp(str3,str1,%d)=%d\n",
         length,strncmp(str3,str1,length));

    printf("strncmp(str1,str3,%d)=%d\n",
         length,strncmp(str1,str3,length));

    printf("strncmp(str1,str3,3)=%d\n",
         length,strncmp(str1,str3,3));

    printf("g-G=%d\n",'g'-'G');

    return 0;
}

gcc下执行结果:
str1="long time"
str2="long time"
str3="lonG time"
strncmp(str1,str2,9)=0
strncmp(str3,str1,9)=-32
strncmp(str1,str3,9)=32
strncmp(str1,str3,3)=9
g-G=32

红色部分比较的是str1和str3的前3个字符的大小,因为str1和str3前3位都一样,为什么输出结果不是0,而是9?

搜索更多相关主题的帖子: include 字符串 
2015-01-24 15:23
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:10 
以下是引用ybyc9999在2015-1-24 15:23:16的发言:

程序如下:
#include
#include

int main(void){
    /*定义三个内容相似的字符串*/
    char str1[]="long time";
    char str2[]="long time";
    char str3[]="lonG time";

    int length=strlen(str1);

    /*分别输出三个字符串的内容*/
    printf("str1=\"%s\"\n",str1);
    printf("str2=\"%s\"\n",str2);
    printf("str3=\"%s\"\n",str3);

    /*演示strncmp函数的使用*/
    printf("strncmp(str1,str2,%d)=%d\n",
         length,strncmp(str1,str2,length));

    printf("strncmp(str3,str1,%d)=%d\n",
         length,strncmp(str3,str1,length));

    printf("strncmp(str1,str3,%d)=%d\n",
         length,strncmp(str1,str3,length));

    printf("strncmp(str1,str3,3)=%d\n",
         length,strncmp(str1,str3,3));

    printf("g-G=%d\n",'g'-'G');

    return 0;
}

gcc下执行结果:
str1="long time"
str2="long time"
str3="lonG time"
strncmp(str1,str2,9)=0
strncmp(str3,str1,9)=-32
strncmp(str1,str3,9)=32
strncmp(str1,str3,3)=9
g-G=32

红色部分比较的是str1和str3的前3个字符的大小,因为str1和str3前3位都一样,为什么输出结果不是0,而是9?


printf("strncmp(str1,str3,3)=%d\n",
         length,strncmp(str1,str3,3));


你有没有发现你写的不大对啊 这里%d输出的是length也就是9

按理这里应该有warning的啊
2015-01-24 15:34
ybyc9999
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2015-1-24
收藏
得分:0 
回复 2楼 zklhp
没有警告,不过明白了,谢谢!
2015-01-24 15:47
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用ybyc9999在2015-1-24 15:47:27的发言:

没有警告,不过明白了,谢谢!

不知道你还能不能看到 但我要告诉你 这里应该是有警告的 只不过默认的情况下没有

a.c:30:9: warning: too many arguments for format [-Wformat-extra-args]
         length,strncmp(str1,str3,3));
         ^
用了中括号里面的参数 或者直接-Wall 显示全部警告 就有了

祝你学习愉快
2015-01-24 16:26
ybyc9999
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2015-1-24
收藏
得分:0 
回复 4楼 zklhp
恩,谢谢
2015-01-24 18:05
快速回复:关于strncmp的疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024578 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved