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