gpt4 book ai didi

c - 为什么 C 字符串文字的最大长度与最大 char[] 不同?

转载 作者:太空狗 更新时间:2023-10-29 16:32:01 25 4
gpt4 key购买 nike

澄清:鉴于字符串文字可以重写为 const
char[]
(见下文),对文字施加的最大长度比char[]s 只是语法上的不便。为什么C标准鼓励这个?


C89 标准对字符串文字有翻译限制:

509 characters in a character string literal or wide string literal (after concatenation)

char 数组没有限制;也许

32767 bytes in an object (in a hosted environment only)

适用(我不确定对象或托管环境是什么意思),但无论如何这是一个更高的限制。

我的理解是,字符串字面量等同于包含字符的 char 数组,即:总是可以这样重写:

const char* str = "foo";

进入这个

static const char __THE_LITERAL[] = { 'f', 'o', 'o', '\0' };
const char* str = __THE_LITERAL;

那么为什么对文字有如此严格的限制?

最佳答案

字符串文字的限制是编译时的要求;逻辑源代码行的长度也有类似的限制。编译器可能使用固定大小的数据结构来保存源代码行和字符串文字。

(C99 将这些特定限制从 509 个字符增加到 4095 个字符。)

另一方面,可以在运行时构建对象(例如char 数组)。这些限制可能是由目标机器架构强加的,而不是编译器的设计。

请注意,这些不是强加给程序的上限。编译器根本不需要强加任何有限限制。如果编译器确实对行长度施加了限制,则它必须至少为 509 或 4095 个字符。 (我认为,大多数实际的编译器不会施加固定限制;而是动态分配内存。)

关于c - 为什么 C 字符串文字的最大长度与最大 char[] 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11488616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com