唯伊堇 发表于 2019-8-16 17:45:12

C语言字符数组的一个可能很傻的问题

想问一个字符数组的问题:我看定义时总是指定数组长度,这样编译时就会为它分配空间。那我如果char a[]="";想问一下编译时a数组的地址是确定的吗?我后面再通过输入给a数组赋值,这样做有什么危害吗?

jackz007 发表于 2019-8-16 18:06:53

本帖最后由 jackz007 于 2019-8-16 19:09 编辑

      虽然你定义了一个空的字符数组 a,但那只是逻辑上为空,事实上,这个数组至少留有一个字节的空间是用来保存字符串结束标志 '\0' 的。
      既然你定义了字符串,那么,在程序编译的时候,会相应预留足够的存储空间,而你定义的是空的字符数组,预留的空间必然会非常的小,具体能分到多少,主要取决于数据单元分配时的边界对齐方式,如果编译器是按 4 字节边界对齐,那就意味着虽然只需要 1 个字节空间,但实际上却可以分到 4 个字节。除了末尾的 '\0' 外,还有 3 个字节的余地可资利用。当然,向这个数组里面存数据也会面临下标超界的问题,如果你的赋值导致内存范围超出,自然就会危害到其他变量的内容,从而为程序带来不确定因素。

唯伊堇 发表于 2019-8-16 19:14:09

jackz007 发表于 2019-8-16 18:06
虽然你定义了一个空的字符数组 a,但那只是逻辑上为空,事实上,这个数组至少留有一个字节的空间是用 ...

您解释的很明白,谢谢!
页: [1]
查看完整版本: C语言字符数组的一个可能很傻的问题