免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2904 | 回复: 4
打印 上一主题 下一主题

[C] 问个比较弱的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-27 11:00 |显示全部楼层 |倒序浏览
检验字符串是否相等:

[code]
1 #include <stdio.h>
  2 #include <stdbool.h>
  3
  4 bool equalstring(const char s1[], const char s2[])
  5 {
  6    bool flag;
  7    int i=0;
  8    while (s1[i]==s2[i]&&s1[i]!='\0'&&s2[i]!='\0')
  9       i++;
10    if (s1[i]==s2[i]=='\0')
11       flag=true;
12    else
13       flag=false;
14    return flag;
15 }
16
17 int main()
18 {
19    bool equalstring(const char s1[], const char s2[]);
20    const char str1[]="test string";
21    const char str2[]="string";
22    printf("%i\n",equalstring(str1, str1));
23    printf("%i\n",equalstring(str1, str2));
24    printf("%i\n",equalstring(str2, "string"));
25 }
[/code]

Env: Linux ;  GCC version 4.1.2

运行结果是: 0 1 0  
问题: 为什么第三个:str2[]="string"和字符串常量"string"比较后,结果是false的?   不是应该相等的吗?  难道这结果又是根据编译器和环境不同而不同的?

论坛徽章:
0
2 [报告]
发表于 2008-08-27 11:43 |显示全部楼层
第10行的判断:

1. if (s1==s2)  结果: 1 0 0

2. if (s1[i]==s2[i])  结果 1 0 1

3. if (s1[i]=='\0' && s2[i]=='\0')  结果 1 0 1

4. if (s1==s2=='\0') 结果 0 1 1  ----->>>>  似乎这个条件才能得出想要的结果,但为什么呢? 这又与“if (s1[i]==s2[i]=='\0')”有啥区别呢?

[[i] 本帖最后由 恋夏寒 于 2008-8-27 11:45 编辑 [/i]]

论坛徽章:
0
3 [报告]
发表于 2008-08-27 11:49 |显示全部楼层
原帖由 gawk 于 2008-8-27 11:46 发表

楼主你应该看一下书,发现你把指针和字符串中的内容没有理清,还有看一下操作符优先级那一章



好的,谢谢提醒。

论坛徽章:
0
4 [报告]
发表于 2008-08-27 17:32 |显示全部楼层
原帖由 Godbach 于 2008-8-27 13:50 发表
10    if (s1==s2=='\0')
这样写你觉得会是什么样的结果呢



请问你所指的结果是什么意思呢?

我上面试了 得出结果是 0 1 1啊!



但上面4钟不同的判断,区别又在哪啊?

论坛徽章:
0
5 [报告]
发表于 2008-08-27 17:35 |显示全部楼层
原帖由 huangwei0413 于 2008-8-27 17:22 发表
第三个测试还有其他问题,字符串结束符在数组中不存在



如果字符串结束符在数组中不存在的话, 前面的while循环就已经不成立了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP