定义两个数组,打印输出后发现会干扰-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3326|回复: 9

[已解决] 定义两个数组,打印输出后发现会干扰

[复制链接]
发表于 2020-11-28 20:54 | 显示全部楼层 |阅读模式
本帖最后由 zk115 于 2020-12-10 11:44 编辑

我定义了两个数组,最后用串口打印发现两个数组连在一起了,请教是哪里的问题呢?

  1. char ABC[8] = {0xFF,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7};
  2. char DDD[8] = {0xBF,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7};

  3. void setup() {
  4.   // put your setup code here, to run once:
  5. int i, j;
  6.     // 初始化串口
  7.   Serial.begin(115200);

  8.     for(i=0;i<20;i++){
  9.     Serial.printf("%x ",ABC[i]);
  10.   }

  11.     Serial.printf("\n");
  12.   for(i=0;i<20;i++){
  13.     Serial.printf("%x ",DDD[i]);
  14.   }
  15.   Serial.printf("\n");
  16. }
复制代码
最后打印出的结果是:
ff f1 f2 f3 f4 f5 f6 f7 e0 17 20 40 78 0 0 0 ff 0 0 0
bf b1 b2 b3 b4 b5 b6 b7 ff f1 f2 f3 f4 f5 f6 f7 e0 17 20 40


很奇怪,第1个数组后面多了一些,第二个数组后面包含了第一个
 楼主| 发表于 2020-11-28 21:17 | 显示全部楼层
顶一下,,,有没有大神帮忙看看!
发表于 2020-11-30 11:56 | 显示全部楼层
如果没看错,先不管语法对不对,你数组定义是8项,输出却是20项,自然有不确定数据被输出了咯
发表于 2020-11-30 13:57 | 显示全部楼层
做错了事就不要说程序不讲武德
 楼主| 发表于 2020-12-9 21:34 | 显示全部楼层
上海老王 发表于 2020-11-30 11:56
如果没看错,先不管语法对不对,你数组定义是8项,输出却是20项,自然有不确定数据被输出了咯 ...

是这样的,我用Serial.printf("%s",DDD);去打印,结果发现打印出来的有两个数组的内容,所以才输出20项来测试,我知道这两个数组在内存中应该在隔壁,但是数组应该有结束符才对啊,好像C语言里面数组结束符就是0x00还是什么
发表于 2020-12-9 22:28 | 显示全部楼层
我知道這兩個數組在內存中應該在隔壁,但是數組應該有結束符才對啊,好像C語言裡面數組結束符就是0x00還是什麼

你的意思是,每個陣列都應該要有所謂的"結束符"?
可是你都規定陣列裡有多少筆資料了,為何系統還要雞婆地加上
"結束符"來浪費你的記憶空間?

我記得以前寫 BASIC 編譯器好像會在字串的最後面自動加上
結束符來代表這個字串結束了,所以印出字串時只要給字串變數
名稱,不論幾個字都會在字串印完後自動結束(因為有結束符),
但 C 的"陣列"跟 BASIC 的"字串"差蠻大的吧,用陣列來做字串
會變得複雜許多,同時也需要你給它特定的"結束符"來進行識別

標題說"干擾",其實只是一個很正常的輸出結果,因為這種結果
就是你的程式碼運行後的結果,並不是不如你所想的就叫做異常,
有時是你所想的結果才是異常...
发表于 2020-12-10 01:33 | 显示全部楼层
zk115 发表于 2020-12-9 21:34
是这样的,我用Serial.printf("%s",DDD);去打印,结果发现打印出来的有两个数组的内容,所以才输出20项来 ...

你的概念没错,字符型数组确实会有结束符,称为空字符,但《arduino语法手册》有如下描述:
“请注意,当声明一个char类型的数组时,你初始化的大小必须大于元素的个数,以容纳所需的空字符。”
你声明的长度是8,自己写的数据也是8,就没有空间容纳空字符了(空字符可由编译器自动续上,但必须预留空间)。
建议你下载打印一本手册在身边以备查。另外,系统虽然也认了你的printf用法,但手册里还是只列了print/println用法,arduino侧重于单片机,主要针对电气控制需求,那些花里胡哨的格式输出实际意义不大。
 楼主| 发表于 2020-12-10 11:41 | 显示全部楼层
上海老王 发表于 2020-12-10 01:33
你的概念没错,字符型数组确实会有结束符,称为空字符,但《arduino语法手册》有如下描述:
“请注意,当 ...

感谢,您明了的解决了我的疑惑,,“初始化的大小必须大于元素的个数”这点有点和C语言不太一样,之前急于调试程序,并没有调试太久,当时我为了解决这个问题,直接声明了9个元素,并且手动在最后一位赋值了“0x00”,看来这个手动赋值是多余的了
发表于 2020-12-24 22:24 | 显示全部楼层
zk115 发表于 2020-12-10 11:41
感谢,您明了的解决了我的疑惑,,“初始化的大小必须大于元素的个数”这点有点和C语言不太一样,之前急 ...

哈哈,太久没上网了,刚看到,至于回复对你有用就好,不用客气,开源环境,交流为主
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 16:24 , Processed in 0.074375 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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