今天在使用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
但结果是
s 想不明白到底哪里出错了
问题是出在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个二进制数据。限于知识,这个结果在我看来毫无意义。如果有更好的解释欢迎补充。
一周热门 更多>