字符串字面量的最大长度是多少?

6
我尝试创建一个很长的字符串字面量,并将其存储在std :: string中。 如果我创建的字符串长度不超过2600个字符,一切都正常打印。 如果超过该数字,则只会打印出一些随机垃圾字符。
我一直在使用C标准作为指导,环境限制规定为“字符串文字中的4095个字符(在连接之后)”。 但是该代码是用C ++编写的。
因此,我的问题是,C ++字符串字面量的最小字符数是多少?
(问题可能可能存在于代码的其他地方,但我想确保不要超过标准设置的限制。文本将在RichEdit控件中打印,因此我怀疑它不是罪魁祸首。)

6
这个链接的问题是关于std::string,而不是字符串字面量。 - aschepler
因为Windows将把单字节字符串转换为Unicode,所以它可能确实有自己独立于C++的限制。尝试在调试器中查看字符串。 - Mark Ransom
@aschepler,这个问题是关于std::string的,第一句话。 - 8bitwide
1
@aschepler确实,如果我可以在std::string中容纳十亿个字符,但它是从一个更窄的限制的常量字符串字面值初始化的,那对我来说毫无意义。这个“可能重复”的问题根本没有回答我的问题。我会将此问题标记为需要管理员关注。 - Lundin
@8bitwide 是的,但是字符串字面量在放入 std::string 之前会存储在内存中,因此 std::string 的限制相当无关紧要。 - Lundin
显示剩余2条评论
1个回答

11

最小值在

附录B
实现数量[implimits]

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

但请注意:

1) 因为计算机是有限的,C++实现在它们能成功处理的程序大小方面不可避免地受到限制。每个实现都应该记录已知的那些限制。此文档可能引用固定限制(如果存在),说明如何计算可用资源的变量限制,或者说固定限制不存在或未知。

2) 这些限制可以限制包括下面描述的或其他的数量。每个数量后面的方括号数字作为该数量的最小值建议。然而,这些数量只是指导方针,不确定符合性。(强调我的)

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


这是否意味着使用任何受到这些限制约束的程序都是实现定义的? - Joseph Mansfield
@sftrabbit 我认为这部分整体而言是实现定义的。 - Luchian Grigore
啊,Annex B被标记为“信息性的”,根据ISO / IEC规定,这意味着它是非规范性的。限制只在附录B中提到,因此就程序作者而言,这些限制并不存在。 - Joseph Mansfield
谢谢,这回答了我的问题(不像“可能的重复”那样)。我已经查看了编译器文档,但对于这个特定的编译器(Embarcadero C++ Builder)几乎没有用处。我想我会向他们发起支持请求。 - Lundin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接