我一直在读的C字符串的ISO C标准,我很好奇,编译器如何确定被定义为C字符串时的静态缓冲区的大小?给定下面的示例c字符串,C字符串静态缓冲区的字节大小
#include <stdio.h>
int main(){
char *str = "Jello, World\0";
}
13个字符的字符串将是13个字节,据推测,然而,根据ISO C 07+标准字符串文字§6.5.4 903,
903的多字节字符序列然后用于初始化静态存储持续时间和长度刚好足以包含序列的阵列。
对我而言,“恰到好处”的措辞很奇怪。这是否意味着,对于C字符串的静态缓冲区并不总是需要一个给定的C字符串的确切大小,可能它可能有更多的空间比需要的?
我也发现了ISO C 2010草案和§6.5.4 6 pg.71,但是这个版本也谈到缓冲区“足够”。有人可以确定这个缓冲区是准确的还是有其他信息呢?
如果字符串是长度的'13'字节则仅13个字节将被分配。 – haccks
这是13个字符,而不是14个? – ThingyWotsit
没有分配静态缓冲区。 'str'是一个指针,而不是一个数组。并没有ISO C07或2010标准(草案不是自动的)。标准是ISO9899:2011,即C11。以前的版本是C99。该标准非常清楚如何将字符串文字转换为多字节字符序列。 – Olaf