增加字符串文字长度限制
Posted
技术标签:
【中文标题】增加字符串文字长度限制【英文标题】:Increase string literal length limit 【发布时间】:2017-07-24 08:30:44 【问题描述】:我有很多大于 65535 字节的字符串文字。我不允许将这些字符串保存到单独的文件中,如何解决字符串限制?
https://***.com/a/11488682/7821462
MSVC:2048
GCC:无限制(最多 100,000 个字符),但在 510 个字符后发出警告:
String literal of length 100000 exceeds maximum length 509 that C90 compilers are required to support
【问题讨论】:
一种选择是将字符串拆分为单个文件中的不同变量,然后使用指向这些变量的指针数组。它让你的生活更艰难,但这就是大自然 适用于哪个编译器? gcc、MSVC 还是两者兼而有之? 为什么你不能使用文件(或其他数据库)来存储文本?您有什么要求不允许这样做? @Rakete1111 我需要先让字符串在 MSVC 上工作,然后再在 gcc 上工作。 @Someprogrammerdude 要求我需要将所有内容都放在一个可执行文件中。 【参考方案1】:这些大字符串看起来更像是资源而不是代码,我会使用 Windows 二进制文件的资源部分(FindResource/LoadResource)和SO: embedding resources into linux executable 的答案将相同的数据插入到 linux 中。
【讨论】:
【参考方案2】:您可以将文本字符串拆分为多个字符串。以下代码适用于 Visual Studio 2017:
const char* p1 = "1234567890..."; // Very long (length > 65000)
const char* p2 = "abcdefghij..."; // Very long (length > 65000)
string s = p1;
s += p2;
cout << s.size() << endl;
您必须将文本字符串写成多行,例如:
const char* p = "This is a "
"very long string...";
实际上 Visual C++ 中的最大限制是 65535。这是编译器错误消息:
致命错误 C1091:编译器限制:字符串长度超过 65535 个字节
【讨论】:
【参考方案3】:尝试使用数组。
https://msdn.microsoft.com/en-us/library/81k8cwsz.aspx
数组的最大大小由 size_t 定义。在头文件 STDDEF.H 中定义,size_t 是一个无符号整数,范围为 0x00000000 到 0x7CFFFFFF。
【讨论】:
【参考方案4】:Microsoft documentation 表示使用连接(即写"a" "b" "c"
而不是"abc"
)可以将限制增加到大约 64 KiB 字节。但这对于您的用例来说还不够。
如果没有,您也许可以单独保存字符串,使用xxd -i
(xxd comes with [vim](http://www.vim.org/)), and
#include` 将其转换为字节数组初始化器(但您必须手动添加空终止符)。
【讨论】:
我写过字符串字面量大于 65535 字节,我来看看数组初始化技术。以上是关于增加字符串文字长度限制的主要内容,如果未能解决你的问题,请参考以下文章