C语言程序中的数组为什么要双倍存储空间?
来源:百度知道 编辑:UC知道 时间:2024/05/28 17:00:37
例如下面的程序:从键盘输入Hello并输出.
#include<stdio.h>
void main()
{char str[10];
scanf("%s",str);
printf("%s",str);
}
Hello才5个字符,故其中的str[10]为什么不是str[5]呢?
谢谢!
但书里说是系统给数组分配2*5=10个字节的存储空间的,如下图所示(请点击打开即可看到):
https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/askleee/pic/item/835a57d1c7e66396a1ec9c1a.jpg
https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/askleee/pic/item/d6ac1a2f3fee69494ec2260b.jpg
https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/askleee/pic/item/b33ecef3d
#include<stdio.h>
void main()
{char str[10];
scanf("%s",str);
printf("%s",str);
}
Hello才5个字符,故其中的str[10]为什么不是str[5]呢?
谢谢!
但书里说是系统给数组分配2*5=10个字节的存储空间的,如下图所示(请点击打开即可看到):
https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/askleee/pic/item/835a57d1c7e66396a1ec9c1a.jpg
https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/askleee/pic/item/d6ac1a2f3fee69494ec2260b.jpg
https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/askleee/pic/item/b33ecef3d
没有规定要双倍的,只要能放下字符串就行了,还有字符串还有一个结束符‘\0'
只是申请的时候申大了一点。
而不是要求双倍空间。
申请大一点以备后用,顺便防止空间不够