请教一下大家C语言,数组传参的思路。

[复制链接]
3676|16
 楼主| zgjzgjkyo 发表于 2020-9-1 14:41 | 显示全部楼层 |阅读模式
本帖最后由 zgjzgjkyo 于 2020-9-1 14:47 编辑

我目前是这样的:

  1. void main
  2. {
  3.         char TestWord[10]={0xF5, 0x11, 0x00, 0xC3, 0xA4, 0xF5};        //实际上这个不一定是10。也有可能是其它随机大小的数组
  4.                                                                                                 //如:char abc[]="123" 又或者 char *abc = "12345"等等.....
  5.         SendString(TestWord);
  6. }


  7. void  SendString( *data);
  8. {        
  9.         unsigned char datalen = strlen(data);                //结果发现这里的datalen数值变成”2“了。思考原因是为上面的第3个数字为 0x00了
  10.                                                                         //如果把 0x00 改为其它数值,也能识别为”6“(但也不正确,我是需要把 10个数包括 0x00也发送出去的)
  11.         for(i = 0 ; i < datalen ; i++)/*(datalen = 0 ; datalen < strlen(data) ; datalen++)*/
  12.         {
  13.                 Uart_SendData8(data[i]);                        //因为辨识不正确,所以无法完整的把数组内容发送出去了.........
  14.         }

  15. }

我目前想到的办法是直接把数值的长度也传参过去。(但对于发送内容不确定,而且内容含有 0x00 这个数组真心没办法。我目前只会用 strlen(data) 这个判断数值的长度,但这个只会计算长度到 0x00。 0x00之后的就不计算了....
不知大家有没有更好的方案?传递 不确定长度的数组的传参?

阿~~代码块怎么编辑也不好看阿...........
chongdongchen 发表于 2020-9-1 16:59 | 显示全部楼层
很明显你要传送的是包含0的字节数据,所以不能使用字符串函数。所以你是对的,只能把长度一起带进去。
一事无成就是我 发表于 2020-9-1 22:04 | 显示全部楼层
设置一个连续是x00的是结尾不就完了,基本就没见过连续多个字节是00的
ipman 发表于 2020-9-1 23:43 | 显示全部楼层
字节数组怎么可能不定长?这好像哪个语言都一样
叶春勇 发表于 2020-9-2 16:52 | 显示全部楼层
modbus用的两个套路,一个是rtu,用时间间隔区别数组大小。另一个是asc,避免使用特殊字符。
按照你的设计,你连不定长通讯协议的结束条件都没定义,也不可能有好方法。
学习下成熟的通讯协议,基本就知道怎么去设计通讯协议了。
jrcsh 发表于 2020-9-3 05:01 | 显示全部楼层
数组   不明白, 发送他的长度 干嘛?    直接读到了数据就 ok 了,,,........     就算用 ASC 也是 -53 ? 就直接得出来  最快还是送 16H
aple0807 发表于 2020-9-3 18:18 来自手机 | 显示全部楼层
这种情况只能同时传递长度才可以,只有ascii编码的数组才可以只传指针
zzz3265 发表于 2020-9-3 21:18 | 显示全部楼层
先找到问题, 问题的关键是应该明白 strlen 是做什么用的
ayb_ice 发表于 2020-9-4 13:17 | 显示全部楼层
每次直接指定长度
呐咯密密 发表于 2020-9-4 17:26 | 显示全部楼层
不要用strlen()函数!换sizeof()。这个问题我遇到过
ta1ent 发表于 2020-9-4 19:52 | 显示全部楼层
看来你发送的内容根本就不是C语言字符串,只是一个char型数组嘛。那怎么能用strlen判断长度呢?
ipman 发表于 2020-9-4 23:21 | 显示全部楼层
呐咯密密 发表于 2020-9-4 17:26
不要用strlen()函数!换sizeof()。这个问题我遇到过

看清楚,要兼容不定长数组,这是不可能的任务
simonliu009 发表于 2020-9-5 08:43 | 显示全部楼层
本帖最后由 simonliu009 于 2020-9-5 21:25 编辑

1. 首先C语言不支持不定长数组。只能先定义一个足够长的数组然后定义好结束符。定义好结束符之后,是不是发送长度就不重要了。
2. 其次你发送的不是字符串,用strlen()是错误的。
3. 假设你这个是嵌入式的设备,而且这个MCU支持micropython,那就可以用可变长度的列表来传输数据了。
西门看雪 发表于 2020-9-6 12:22 | 显示全部楼层
楼主才学编程吧?

这个问题实在是太简单了,一般的写法是:

发送函数:
void  SendString( char * buffer,int buffer_len);

调用的时候可以是这样:
SendString((char *)TestWord, sizeof(TestWord));

不管你要发送的数据是结构体,数组,都可以按照这个套路来。
liaojihua2010 发表于 2020-9-7 14:46 | 显示全部楼层
楼上正解
24kdewhite 发表于 2020-9-7 16:31 | 显示全部楼层
数组传参传的是地址,也就是指针,多写写就好了
24kdewhite 发表于 2020-9-7 16:34 | 显示全部楼层
应该找本c语言的书仔细看看,语法搞清楚就没问题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

213

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部