【求助】C语言中sizeof使用错误

2019-07-15 09:23发布

今天在使用sizeof判断待处理字符串的长度时出现了错误。为了发现错误在哪儿,对sizeof单独进行了验证。
对于sizeof的用法网上资源很多,其返回结果类型是size_t,它在头文件中typedef为unsigned int类型。

源代码

#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#include <string.h>

void        mInitSTDIO( )
{
        SCON = 0x50;
        TMOD = 0x21;
        TH1 = 0xfd;  /* 11.0592MHz, 9600bps */
        TR1 = 1;
        ti = 1;
}
void main()
{
unsigned char string1[6];
mInitSTDIO();
printf("output ");
printf("%d",sizeof('c'));
printf("%d",sizeof(string1));
while(1);
}

利用串口助手接收printf函数输出数据,按理说输出数据依次为:
output
1
6
但结果是
WechatIMG48.jpeg s 想不明白到底哪里出错了

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
liukun1995
1楼-- · 2019-07-15 18:21
printf("%d",sizeof('c'));
printf("%d",sizeof(string1));
你这两句并没有换行,打印出来的东西应该也不会换行啊,你添加个 在对着看下
wangling123
2楼-- · 2019-07-15 19:49
liukun1995 发表于 2017-11-8 14:24
printf("%d",sizeof('c'));
printf("%d",sizeof(string1));
你这两句并没有换行,打印出来的东西应该也不会换行啊,你添加个 在对着看下

感谢回复,已改,上图就是加上 之后的结果
wangling123
3楼-- · 2019-07-16 01:48
这几天完成了小项目之后回头来看这个问题。
问题是出在sizeof()运算符的值的类型是size_t而不是int,所以在printf中用于int的%d不适合。
我也尝试过用%u来输出,结果和上面一样也是错误的。
解决方法是:定义一个int类型的变量来承载sizeof的结果 如:
int k;
k=sizeof(string1);
printf("%d",k);
最后的结果显示为6。正确。
再来看上面错误的结果,‘c’的字节数输出结果为256,而string1对应的输出结果为6*256=1536。
由此可以看出,直接利用printf输出的sizeof结果更像是 被表达数据所占位数的容量:如‘c’一个无符号字符占一个8位字节,共可能存储256个二进制数据。限于知识,这个结果在我看来毫无意义。如果有更好的解释欢迎补充。

一周热门 更多>