找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3833|回復: 5
收起左側

關于C語言strcmp函數數組的比較問題

[復制鏈接]
ID:847776 發(fā)表于 2021-2-3 21:44 | 顯示全部樓層 |閱讀模式
使用strcmp來比較兩個相同的字符數組時,得不到相等的結果。根據程序運,table1和table2賦值相同的值,應該相等才對啊,但我將if(strcmp(table1,table2)==0)變?yōu)閕f(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();
    }
  }
}


回復

使用道具 舉報

ID:693038 發(fā)表于 2021-2-4 11:11 | 顯示全部樓層
strcmp比較的是字符串,table1 table2是數組,差異在'\0'
回復

使用道具 舉報

ID:871393 發(fā)表于 2021-2-4 18:03 | 顯示全部樓層
樓上說的對 我補充一下 存6個字符的數組請用7個byte空間 多一個留給最后的0,也就是'\0'
字符串復制可用strcpy或strncpy, 不必循環(huán)

如果不想改以上問題, 其他解決方法:
字符串比較可用strncmp. 可避免這個問題
使用內存值比較memcmp, 與前一條功能類似
回復

使用道具 舉報

ID:847776 發(fā)表于 2021-2-4 20:36 | 顯示全部樓層
lincheng15 發(fā)表于 2021-2-4 11:11
strcmp比較的是字符串,table1 table2是數組,差異在'\0'

table1和table2我定義的都是uchar,也就是字符型的數組,那里面的6個元素,不就是以字符串的形式存在的嗎?哪里理解錯了呢?
回復

使用道具 舉報

ID:847776 發(fā)表于 2021-2-4 22:33 | 顯示全部樓層
77599585 發(fā)表于 2021-2-4 18:03
樓上說的對 我補充一下 存6個字符的數組請用7個byte空間 多一個留給最后的0,也就是'\0'
字符串復制可用str ...

想請教下,您的意思是字符型數組table1[6],這里的6是包含了\0的,對嗎?那我給它賦值6個元素之后,\0會被覆蓋掉嗎?
如果會被覆蓋掉,那這個字符數組是不是就不合法了,所以才導致strcmp結果不正確?
如果不會被覆蓋,那我最后一個元素是否就賦值不成功呢(因為加上\0一共才6個byte空間)?
回復

使用道具 舉報

ID:871393 發(fā)表于 2021-2-5 09:39 | 顯示全部樓層
憶1709 發(fā)表于 2021-2-4 22:33
想請教下,您的意思是字符型數組table1[6],這里的6是包含了\0的,對嗎?那我給它賦值6個元素之后,\0會 ...

結尾的0是可以被覆蓋的
str所有函數, 都應當使用以0結尾的字符串
你可以使用指針方式初始化字符串 這樣會默認加一位0
unsigned char *str1 = "abc";
這樣str1實際上就是{'a', 'b', 'c', '\0'}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表