是 char str1[] = {'s','t','r','i','n','g','\0'} 复制自常量内存段要像 char str2[] = "string" 一样堆叠?

Is char str1[] = {'s','t','r','i','n','g','\0'} copied from constants memory segment to stack like char str2[] = "string"?

我知道万一使用下一个语法 char str1[] = "string","string" 保存在常量段中并复制到堆栈(printf("%p", str1) 显示堆栈的地址)。我想知道 char str2[] = {'s','t','r','i','n','g','[=19=]'} 是否受到与 char str1[] = "string" 相同的处理,或者只是保存在堆栈中(printf("%p", str2) 显示堆栈的地址)。

这些声明的副作用

char str2[] = {'s','t','r','i','n','g','[=10=]'};

char str1[] = "string";

不同。

注意最后的初始化可以这样写例如

char str1[] = "str" "ing";

最后一种情况(C 标准,6.4.5 字符串文字)

6 In translation phase 7, a byte or code of value zero is appended to each multibyte character sequence that results from a string literal or literals.78) The multibyte character sequence is then used to initialize an array of static storage duration and length just sufficient to contain the sequence...

在第一种情况下,静态存储持续时间的字符数组都不是从用作初始值设定项的单独字符创建的。