查看: 2781|回复: 5

[其他] 针对strcmp和==的疑问

[复制链接]

该用户从未签到

3

主题

17

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
发表于 2012-6-8 09:37:17 | 显示全部楼层 |阅读模式
        char Line[]="o1001";
        char O_Char = 'o';
       
        if(strcmp(&Line[0], &O_Char) == 0)
        {
          printf("Equal.\r\n");
        }
        else
        {
          printf("UnEqual.\r\n");
        }
       
        if(Line[0] == O_Char)
        {
          printf("Equal.\r\n");
        }
        else
        {
          printf("UnEqual.\r\n");
        }
按正常的逻辑来讲,在终端会打印出两个“Equal”,可是目前却打印出两个“UnEqual”。难道是编译器有问题?如果是用法不得当,那正确的用法应该是怎样呢?
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

3

主题

33

帖子

0

新手上路

Rank: 1

积分
76
最后登录
1970-1-1
发表于 2012-6-8 10:12:34 | 显示全部楼层

RE:针对strcmp和==的疑问

O_Char 不是字符串,O_Char在栈中,其地址后面的数据应该不是“1001”所以第一个应该是UnEqual;第二个应该是Equal。
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

79

帖子

0

中级会员

Rank: 3Rank: 3

积分
441
最后登录
1970-1-1
发表于 2012-6-8 11:07:14 | 显示全部楼层

RE:针对strcmp和==的疑问

这调用 :strcmp(&Line[0], &O_Char)
是把O_Char当成字符串,但实际上O_Char是字符,O_Char后面接着的数据,几乎不可能是字符串“1001”,因此第一个应该是 UnEqual
第二个,应该是 Equal ,如果输出 UnEqual ,那有可能是编译器的问题,是否开了优化?
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

17

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
 楼主| 发表于 2012-6-8 15:37:55 | 显示全部楼层

RE:针对strcmp和==的疑问

楼上两位讲的都对,现在的工程包是别人给的,具体什么环境配置都是别人设定好的,刚查过在没开优化的情况下还是同样的问题。第二种情况比较BT,新建一个工程后没出现这种情况。如果想实现打印两个Equal,可以改为如下代码:
        char Line[]="o1001";
        char O_Char = 'o';
      
        if(strncmp(&Line[0], &O_Char, 1) == 0)
        {
          printf("Equal.\r\n");
        }
        else
        {
          printf("UnEqual.\r\n");
        }
      
        if(Line[0] == O_Char)
        {
          printf("Equal.\r\n");
        }
        else
        {
          printf("UnEqual.\r\n");
        }
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

33

帖子

0

新手上路

Rank: 1

积分
76
最后登录
1970-1-1
发表于 2012-6-8 16:26:53 | 显示全部楼层

RE:针对strcmp和==的疑问

如果第二个是UnEqual,建议做如下调试:printf("%s",Line);看看是不是
"o1001"。如果不是,是不是其他地方有flashwrite,写过存放"o1001"的数据段?
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

17

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
 楼主| 发表于 2012-6-12 10:35:54 | 显示全部楼层

回复:针对strcmp和==的疑问

回复第 5 楼 于2012-06-08 16:26:53发表:
如果第二个是UnEqual,建议做如下调试:printf("%s",Line);看看是不是
"o1001"。如果不是,是不是其他地方有flashwrite,写过存放"o1001"的数据段?
 

我当时用的工程包是FreeScale的FAE给的标准工程包,在这个工程包里千奇百怪的问题都会出现,之后我自己新建一个工程就没再出现这种问题,其他地方没有FlashWrite,Main函数中只有这么些代码。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-28 11:52 , Processed in 0.093086 second(s), 26 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表