Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C字符串静态缓冲区字节大小_C - Fatal编程技术网

C字符串静态缓冲区字节大小

C字符串静态缓冲区字节大小,c,C,我一直在阅读关于C字符串的ISO C标准,我很好奇在定义C字符串时编译器如何确定静态缓冲区的大小?给定下面的示例c字符串 #include <stdio.h> int main(){ char *str = "Jello, World\0"; } #包括 int main(){ char*str=“果冻,世界\0”; } 13个字符的字符串应该是13个字节;但是,根据ISO C 07+字符串文字标准的规定 903然后使用多字节字符序列初始化静态存储持续时间和长度刚好足以

我一直在阅读关于C字符串的ISO C标准,我很好奇在定义C字符串时编译器如何确定静态缓冲区的大小?给定下面的示例c字符串

#include <stdio.h>

int main(){
    char *str = "Jello, World\0";
}
#包括
int main(){
char*str=“果冻,世界\0”;
}
13个字符的字符串应该是13个字节;但是,根据ISO C 07+字符串文字标准的规定

903然后使用多字节字符序列初始化静态存储持续时间和长度刚好足以包含该序列的数组

对我来说,“刚好足够”这个词用词很奇怪。这是否意味着c字符串的静态缓冲区并不总是给定c字符串所需的确切大小,可能它的空间比所需的大


我也在中找到了ISO C 2010草稿和,但是这个版本也谈到了缓冲区“刚刚足够”。有人能确定这个缓冲区是准确的还是有其他方面的信息吗?

字符串常量的类型
“Jello,World\0”
char[14]
。它足够大,可以容纳字符串中的每个字符(包括任何显式空字节)加上一个隐式空终止字节。

如果字符串的长度为
13
字节,则只分配13个字节。即13个字符,而不是14个?没有分配静态缓冲区
str
是指针,而不是数组。并且没有ISO C07或2010标准(草案不是自动修订的)。标准为ISO9899:2011,即C11。之前的版本是C99。该标准非常清楚如何将字符串文字转换为多字节字符序列。谢谢,那么您的意思是缓冲区总是精确的?i、 e.字符串长度加上隐式空字符?如果是这样的话,他们在使用“刚好足够”的文档中的措辞真的总是准确吗?@Miket25是的,这就是“刚好足够”的意思,即足够大,可以容纳字符串加上空字节,但不能太大。