找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于单片机C语言strcat函数复制字符串的问题

[复制链接]
跳转到指定楼层
楼主
编程大佬们,遇到一个困惑的问题,望解答 用strcat函数复制电压的ASCII,可是一直复制失败,是空的。

E)P1BTUK`L)SW)(4@XDPRW0.png (382.98 KB, 下载次数: 36)

E)P1BTUK`L)SW)(4@XDPRW0.png

[]6(I6JFO%S)EK1VR@V%W2H.png (64.27 KB, 下载次数: 44)

[]6(I6JFO%S)EK1VR@V%W2H.png

QB0VT2S}@[@@R)K@I$@B%OR.png (54.64 KB, 下载次数: 34)

QB0VT2S}@[@@R)K@I$@B%OR.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2021-12-14 21:30 | 只看该作者
要把准备复制的数组先转换成ASCII再进行复制
如果数组中有0x00的话,函数就会结束了,因为字符串是以'\0'结束的
其它函数也会用到这个值的,所以,一般都是先转换成ASCII再处理
如果不是这个原理话,那我就不知道了
一般数组之间传递,我都是用结构
当你定义了结构a和结构b之后,就可以像变量一样的:a=b
回复

使用道具 举报

板凳
ID:832450 发表于 2021-12-14 21:54 来自手机 | 只看该作者
Y_G_G 发表于 2021-12-14 21:30
要把准备复制的数组先转换成ASCII再进行复制
如果数组中有0x00的话,函数就会结束了,因为字符串是以'\0'结 ...

这个我是知道的,我复制了好多组ASCII值,就单单这个电压不行,哭了,但是电压已经成功转为ASCII了,太难了
回复

使用道具 举报

地板
ID:883242 发表于 2021-12-14 22:00 | 只看该作者
你这个ONENET_DATA_ASC函数里面一口气定义了112 bytes变量,51应该最多120 byte全局变量+局部变量,链接能通过?
回复

使用道具 举报

5#
ID:832450 发表于 2021-12-15 07:44 | 只看该作者
Hephaestus 发表于 2021-12-14 22:00
你这个ONENET_DATA_ASC函数里面一口气定义了112 bytes变量,51应该最多120 byte全局变量+局部变量,链接能 ...

我用的STC8F单片机呢,搞不懂,就这一组ASCII没了,其他组都好好的,难搞
回复

使用道具 举报

6#
ID:401564 发表于 2021-12-15 13:50 | 只看该作者
18936674086 发表于 2021-12-15 07:44
我用的STC8F单片机呢,搞不懂,就这一组ASCII没了,其他组都好好的,难搞

要不是楼上说到,我都没有看到,一组电压数据怎么会用到长度100的数组呢?在我看来,这是一个很恐怖的长度
如果要这么长的数组,先在数组前加限定为xdata,不然的话,用的还是8051原本的RAM
STC8F多出来的SRAM是在xdata区的
如果还是不行,那就按我说的,用结构吧
回复

使用道具 举报

7#
ID:832450 发表于 2021-12-15 16:10 | 只看该作者
Y_G_G 发表于 2021-12-15 13:50
要不是楼上说到,我都没有看到,一组电压数据怎么会用到长度100的数组呢?在我看来,这是一个很恐怖的长度
...

非常感谢回答,我也不是很清楚究竟原因,我现在在这个数组又添加了20位数据,依然没有问题,可就是独独缺失了4位数据,奇了怪了,我再研究研究
回复

使用道具 举报

8#
ID:750420 发表于 2021-12-15 16:58 | 只看该作者
18936674086 发表于 2021-12-15 16:10
非常感谢回答,我也不是很清楚究竟原因,我现在在这个数组又添加了20位数据,依然没有问题,可就是 ...

直接将strcat(temp_buf,"3283")实验一下
回复

使用道具 举报

9#
ID:415064 发表于 2021-12-15 17:51 | 只看该作者
        sprintf_s(tmp_buf, "%s","02");
        strcat_s(tmp_buf, "03");
        strcat_s(tmp_buf, "3283");
        strcat_s(tmp_buf, "12345678"); 这个是没有问题的,问题在你的那个电压转换哪里
回复

使用道具 举报

10#
ID:415064 发表于 2021-12-15 18:01 | 只看该作者
也有可能是你的整型中出现ascii的00,这个在字符串中代表\0
回复

使用道具 举报

11#
ID:832450 发表于 2021-12-16 08:01 | 只看该作者
wojiaoguogai 发表于 2021-12-15 17:51
sprintf_s(tmp_buf, "%s","02");
        strcat_s(tmp_buf, "03");
        strcat_s(tmp_buf, "3283");

好,谢谢解答,我去试试
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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