【问题标题】:Max length of a string literal?字符串文字的最大长度?
【发布时间】:2026-02-03 01:25:01
【问题描述】:

我正在尝试创建一个长字符串文字,我将其存储在 std::string 中。如果我创建一个最多大约 2600 个字符的文字,那么一切都很好。如果超过这个数量的符号,我只会打印一些随机的垃圾字符。

我一直使用 C 标准作为指导,环境限制被指定为“字符串文字中的 4095 个字符(连接后)”。但是代码是用 C++ 编写的。

所以我的问题是,C++ 字符串文字中的最少字符数是多少?

(问题可能在代码的其他地方,但我想确保我没有通过标准设置的限制。文本打印在 RichEdit 控件中,所以我怀疑是罪魁祸首.)

【问题讨论】:

  • 链接的问题是关于std::string,而不是字符串文字。
  • 因为 Windows 会将单字节字符串转换为 Unicode,它可能确实有自己的限制,独立于 C++。尝试在调试器中查看字符串。
  • 能否将字符串打印到控制台而不是 RichEdit 控件?
  • @aschepler,这个问题是关于std::string,第一句。
  • @aschepler 实际上,如果我可以在 std::string 中容纳十亿个字符,如果它是从具有更窄限制的常量字符串文字初始化的,那对我没有好处。 “可能的重复”丝毫没有回答我的问题。我会将此标记为版主注意。

标签: c++ string literals


【解决方案1】:

最小值在

中指定

附件 B
实施数量 [implimits]

字符串文字中的字符(连接后)[65 536]。

但请注意:

1) 由于计算机是有限的,C++ 实现不可避免地受限于它们所使用的程序的大小 可以成功处理。 每个实施都应记录已知的这些限制。 本文档 可能会引用存在的固定限制,例如如何计算可变限制作为可用的函数 资源,或者说固定限制不存在或未知。

2) 限制可能会限制包括以下描述的数量或其他数量。括号内的数字 建议在每个数量之后作为该数量的最小值。但是,这些数量是 仅作为准则,不能确定合规性。 (强调我的)

你的实现应该为你提供这个数字。

【讨论】:

  • 这是否使任何程序使用受这些限制实现约束的任何东西?
  • @sftrabbit 我认为这部分都是实现定义的。
  • 啊,附件 B 被标记为“信息性”,根据 ISO/IEC 指令,这意味着它是非规范性的。限制仅在附件 B 中提及,因此就程序的作者而言,限制不存在。
  • 谢谢,这回答了我的问题(与“可能重复”不同)。我已经检查了编译器文档,但它们对于这个特定的编译器(Embarcadero C++ Builder)几乎没有用。我想我会和他们一起开始支持差事。