我一直在阅读c字符串的ISO 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字符串所需的确切大小,可能它可能有比所需更多的空间?
我还在§6.5.4 6 pg.71中找到了ISO C 2010草案,但是这个版本也将缓冲区称为“恰到好处”。有人可以确定这个缓冲区是否准确或者是否有其他信息?
答案 0 :(得分:2)
字符串常量"Jello, World\0"
的类型是char [14]
。它对于字符串中的每个字符(包括任何显式空字节)加上一个隐式空终止字节足够大。