OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4547|回复: 9

strlen和sizeof的区别。

[复制链接]

32

主题

223

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2015-9-23
在线时间
120 小时
发表于 2015-12-8 10:21:12 | 显示全部楼层 |阅读模式
5金钱
程序用strlen()
uchar order_start[]="$DSMBStart0*";
for(order=0;order<strlen(order_start);order++)
   {
    UART1SendData(order_start[order]); 
   }
   UART1SendData(0X32);        //串口1发送函数




程序用sizeof
uchar order_start[]="$DSMBStart0*";
for(order=0;order<sizeof(order_start);order++)
{
UART1SendData(order_start[order]);
}
UART1SendData(0X32); //串口1发送函数


当用到sizeof时串口1 发送的0X32有时候发不出来,程序貌似跳过他一样。
但是用strlen时不会出现这种情况。
sizeof(order_start);和strlen(order_start);在这种情况下应该都可以啊,但是sizeof在编译的时候会得到结果,应该比strlen好一些吧。


各位大神请赐教。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-12-8 10:36:30 | 显示全部楼层
0X32发不出来不正常,这个不应该受到前边影响,多测试一下

以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

32

主题

223

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2015-9-23
在线时间
120 小时
 楼主| 发表于 2015-12-8 11:53:52 | 显示全部楼层
回复【2楼】龙之谷:
---------------------------------
刚测试了在UART1SendData(0X32);前面加一个5ms的延时,就不会发不出来,求解。。。。
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-12-8 13:08:35 | 显示全部楼层
发送要有等待发送完成语句
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

0

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2014-6-5
在线时间
37 小时
发表于 2015-12-8 13:13:57 | 显示全部楼层
strlen是测试一个字符串的实际长度,这个字符串如果中间包含结束字符'\0'得出的结果就不准   sizeof是获取一个数据实际占空内存空间的大小  比如char a = 'a'; 则sizeof(a)的结果为1,因为一个char型占用一个字节。同理一个int型一般占用4个字节。 sizeof也可以用来测试字符串的长度,此时若定义了一个10字节的字符串 ,但内容为空,用strlen和sizeof就会得到不用的结果。
回复

使用道具 举报

1

主题

374

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1327
金钱
1327
注册时间
2014-7-23
在线时间
422 小时
发表于 2015-12-8 14:37:46 | 显示全部楼层
回复【5楼】zhanghan4310:
---------------------------------
恩,对的,一个是关键字,一个是函数
回复

使用道具 举报

32

主题

223

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2015-9-23
在线时间
120 小时
 楼主| 发表于 2015-12-8 15:26:50 | 显示全部楼层
回复【5楼】zhanghan4310:
---------------------------------
恩,你说的我能理解。strlen和sizeof都能测试出我定义数组长度。
可是为什么不能执行下面的UART1SendData(0X32);?
在发送函数里面我有发送完成语句。
回复

使用道具 举报

32

主题

223

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2015-9-23
在线时间
120 小时
 楼主| 发表于 2015-12-8 15:27:09 | 显示全部楼层
回复【4楼】龙之谷:
---------------------------------
发送里面有发送完成语句 。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-10 00:03:03 | 显示全部楼层
仿真....
回复

使用道具 举报

32

主题

223

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2015-9-23
在线时间
120 小时
 楼主| 发表于 2015-12-10 16:49:02 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
yes ,get
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 06:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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