固定长度空字符串中的空字符在哪里?

Ele*_*fee 4 c c-strings

所以我好奇地阅读了一些C代码; 假设我们有以下代码:

char text[10] = "";
Run Code Online (Sandbox Code Playgroud)

那么C编译器在哪里放置空字符?

我可以想到3种可能的情况

  1. 在一开始,然后是9个字符的任何曾经在内存中
  2. 到最后,所以9个字符的垃圾,然后一个尾随 '\0'
  3. 它完全用10填充 '\0'

问题是,根据两种情况,是否有必要'\0'在执行时添加尾随strncpy.如果是第2和第3种情况,那么这不是绝对必要的,而是一个好主意; 如果它是案例1,那么这是绝对必要的.

这是什么?

P.P*_*.P. 5

在初始化中,text数组填充空字节(即选项#3).

char text[10] = "";
Run Code Online (Sandbox Code Playgroud)

相当于:

char text[10] = { '\0' };
Run Code Online (Sandbox Code Playgroud)

因为第一个元素text被显式初始化为零,其余部分被C11初始化隐式零初始化,初始化6.7.9,21:

如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同.