找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3843|回复: 5
打印 上一主题 下一主题
收起左侧

关于C语言strcmp函数数组的比较问题

[复制链接]
跳转到指定楼层
楼主
ID:847776 发表于 2021-2-3 21:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用strcmp来比较两个相同的字符数组时,得不到相等的结果。根据程序运,table1和table2赋值相同的值,应该相等才对啊,但我将if(strcmp(table1,table2)==0)变为if(strcmp(table1,table2)!=0)时,蜂鸣器响了,也就是说两个数组不相等。请教下这是什么原因呢?难道不能这样比较吗?小弟新手,感谢指教。


代码:
======================
#include <reg52.h>
#include <intrins.h>
#include <string.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit Beef=P0^1;
uchar code arrl[]={"123456"};
uchar table1[6],table2[6];
uchar a,s;
void delay(uint i) //延时函数
{while(i--);}
void Bee() //蜂鸣器函数
{
    int x;   
    for(x=1000;x>0;x--)
        {
         Beef=~Beef;
         delay(10);
        }
}
void main()
{
  for(a=0;a<6;a++)
  {
    table1[a]=arrl[a];
    table2[a]=arrl[a];
  }

  if(strcmp(table1,table2)==0)
  {
    while(1)
    {
      Bee();
    }
  }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:693038 发表于 2021-2-4 11:11 | 只看该作者
strcmp比较的是字符串,table1 table2是数组,差异在'\0'
回复

使用道具 举报

板凳
ID:871393 发表于 2021-2-4 18:03 | 只看该作者
楼上说的对 我补充一下 存6个字符的数组请用7个byte空间 多一个留给最后的0,也就是'\0'
字符串复制可用strcpy或strncpy, 不必循环

如果不想改以上问题, 其他解决方法:
字符串比较可用strncmp. 可避免这个问题
使用内存值比较memcmp, 与前一条功能类似
回复

使用道具 举报

地板
ID:847776 发表于 2021-2-4 20:36 | 只看该作者
lincheng15 发表于 2021-2-4 11:11
strcmp比较的是字符串,table1 table2是数组,差异在'\0'

table1和table2我定义的都是uchar,也就是字符型的数组,那里面的6个元素,不就是以字符串的形式存在的吗?哪里理解错了呢?
回复

使用道具 举报

5#
ID:847776 发表于 2021-2-4 22:33 | 只看该作者
77599585 发表于 2021-2-4 18:03
楼上说的对 我补充一下 存6个字符的数组请用7个byte空间 多一个留给最后的0,也就是'\0'
字符串复制可用str ...

想请教下,您的意思是字符型数组table1[6],这里的6是包含了\0的,对吗?那我给它赋值6个元素之后,\0会被覆盖掉吗?
如果会被覆盖掉,那这个字符数组是不是就不合法了,所以才导致strcmp结果不正确?
如果不会被覆盖,那我最后一个元素是否就赋值不成功呢(因为加上\0一共才6个byte空间)?
回复

使用道具 举报

6#
ID:871393 发表于 2021-2-5 09:39 | 只看该作者
忆1709 发表于 2021-2-4 22:33
想请教下,您的意思是字符型数组table1[6],这里的6是包含了\0的,对吗?那我给它赋值6个元素之后,\0会 ...

结尾的0是可以被覆盖的
str所有函数, 都应当使用以0结尾的字符串
你可以使用指针方式初始化字符串 这样会默认加一位0
unsigned char *str1 = "abc";
这样str1实际上就是{'a', 'b', 'c', '\0'}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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