C语言的字符数组中sizeof()操作符的计算问题,请帮忙进来看看!
直接上DEMO程序:
main()
{
char s[5];
memset(s, 'A', sizeof(s));
s[5] = '\0';
printf("s=%s\n", s); // 输出: s=AAAAA
printf("sizeof(s)=%d\n", sizeof(s)); // 输出: sizeof(s)=5
}
我的问题如下:
1. char s[5], 表示字符数组s可以存储5个字符还是6个字符 ? 最后一个字符应该存储的是'\0'
2. 输出s=AAAAA没有疑问, 但是sizeof(s)为什么输出5 ? sizeof(s)计算的是s的存储空间大小,最后一个'\0' 没有统计进去吗 ?
3. char c[] = "abcde", 则sizeof(c)=6, 为什么这里等于6而不是5? 显然这里在统计c的存储空间大小的时候,将'\0'统计进去了
DEMO非常简单,请这方面概念清楚的朋友们帮忙看看,非常感谢!
------解决方案--------------------当适用了于一个结构类型或变量时,sizeof返回实际的大小,当适用一静态地址空间数组,sizeof返回全部数组的尺寸;
1. char s[5]表示存5个字符的数组,但这5个字符由于没有初始化,所以内容是随机的字符(不可预知的);
2. s[5] = '\0';这里你越界访问了(错误的使用),下标从0到4;sizeof()是5,这里不管最后一个字符是不是'\0';
3. sizeof计算静态字符串(存储在静态内存中)时,包括字符串最末尾的'\0'字符;
------解决方案--------------------基础问题,好好看看C语言当中关于数组和指针那部分吧。
------解决方案--------------------'\0'就是asc码为0的字符。计算静态字符串时当然会占字节数。