你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

楼主: creator2zjt-113

我自己写的一个函数里的Sizeof有问题,求助【悬赏问答】

[复制链接]

3

主题

32

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-8-22 12:08:36 | 显示全部楼层 |阅读模式
弱弱的问一下,自己写了一个RS232发送的函数,但是不能正常工作,看了书也没找到那里错误,但就是sizeof计算的不对。
代码如下:

<span style="font-size: small"><span style="font-family: 宋体">void RS232_Send(USART_TypeDef* RS232_No,  uint8_t ToSend[])
{
 uint8_t NbrOfDataToTransfer = 0;
 uint8_t TxCounter = 0;
 NbrOfDataToTransfer = sizeof(ToSend);
 USART_SendData(RS232_3, NbrOfDataToTransfer);
 while(TxCounter
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-8-22 14:27:29 | 显示全部楼层

RE:我自己写的一个函数里的Sizeof有问题,求助。

sizeof是计算你的给的数组的空间,这样是不对的。你应该自己输入要发送的长度。这样最好的办法。
回复 支持 反对

使用道具 举报

3

主题

32

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-8-22 16:10:57 | 显示全部楼层

回复:我自己写的一个函数里的Sizeof有问题,求助。

回复第 2 楼 于2012-08-22 14:27:29发表:
sizeof是计算你的给的数组的空间,这样是不对的。你应该自己输入要发送的长度。这样最好的办法。 

这个是我参考STM官方的例程修改的,原来的是NbrOfDataToTransfer = sizeof(ToSend) / sizeof(*(ToSend)) - 1),可以计算出正确的长度,我发现sizeof(ToSend) 在这个例子中计算的数值是一样的,就写成这个了。
写成这样的原因,是觉得每次发送的时候都要自己计算数组长度,觉得而有点麻烦,用这样的方法可以让机器计算长度。
问题在于,比如有一个Buffer[ ]数组,在RS232_Send( )函数中直接写成sizeof(Buffer) 计算数组的长度是正确的,但就是通过RS232_Send(RS232-No, Buffer )计算Buffer[ ]的长度就不对。是不是我写的这个函数不正确呢,比如语法的错误,什么的,但是每次调用时输出的前三个字符是我调用的字符串,实在不懂。
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-8-22 17:24:08 | 显示全部楼层

RE:我自己写的一个函数里的Sizeof有问题,求助。

可以看到例程里面计算的方式是通过数据空间和每个数据单元占用的字节来计算的。这样是准确的。你看一下sizeof计算的规则。
回复 支持 反对

使用道具 举报

3

主题

32

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-8-22 21:58:50 | 显示全部楼层

回复:我自己写的一个函数里的Sizeof有问题,求助。

回复第 4 楼 于2012-08-22 17:24:08发表:
可以看到例程里面计算的方式是通过数据空间和每个数据单元占用的字节来计算的。这样是准确的。你看一下sizeof计算的规则。 

我看过了,是正确的,原例程中的这一段我直接拿来用也是正确的,但就是放在我这个函数里面就不正确了,只能得到3,不知道是哪里错了,找不到原因。
回复 支持 反对

使用道具 举报

24

主题

591

回帖

0

蝴蝶豆

中级会员

最后登录
2020-12-2
发表于 2012-8-22 22:03:16 | 显示全部楼层

RE:我自己写的一个函数里的Sizeof有问题,求助。

你的函数没有问题,因为那是函数的一个行参参数,到函数里面采用这个方法就只能得出前三个数据了。
回复 支持 反对

使用道具 举报

3

主题

32

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-8-28 22:37:38 | 显示全部楼层

回复:我自己写的一个函数里的Sizeof有问题,求助【悬赏问答】

回复第 6 楼 于2012-08-22 22:03:16发表:
你的函数没有问题,因为那是函数的一个行参参数,到函数里面采用这个方法就只能得出前三个数据了。 

我仔细看了看函数的定义方法,函数处理数组时是用指针处理的,不是想其他变量一样用变量的副本处理,我这里sizeof得到的可能是指针的大小吧。
回复 支持 反对

使用道具 举报

0

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
2020-6-19
发表于 2012-8-29 11:52:27 | 显示全部楼层

回复:我自己写的一个函数里的Sizeof有问题,求助【悬赏问答】

sizeof不是函数,它是是在程序编译时计算大小的
回复 支持 反对

使用道具 举报

1

主题

39

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-8-30 15:07:28 | 显示全部楼层

回复:我自己写的一个函数里的Sizeof有问题,求助【悬赏问答】

回复第 7 楼 于2012-08-28 22:37:38发表:
回复第 6 楼 于2012-08-22 22:03:16发表:
你的函数没有问题,因为那是函数的一个行参参数,到函数里面采用这个方法就只能得出前三个数据了。 

我仔细看了看函数的定义方法,函数处理数组时是用指针处理的,不是想其他变量一样用变量的副本处理,我这里sizeof得到的可能是指针的大小吧。
 
指针的大小不应该是4吗?
 
回复 支持 反对

使用道具 举报

4

主题

224

回帖

0

蝴蝶豆

初级会员

最后登录
2020-7-4
发表于 2012-9-2 00:09:00 | 显示全部楼层

RE:我自己写的一个函数里的Sizeof有问题,求助【悬赏问答】

在c语言中,数组作为形参传入到子函数中去,其实是传入一个指针,这个指针指向数组的首地址,所以sizeof()等于4
为什么那个NbrOfDataToTransfer等于3,你要查看你传输的数据是不是一个字符串,字符串是有结束标志的, 除掉结束标志就只有三字节了
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版