增加字符串文字长度限制

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 -ixxd comes with [vim](http://www.vim.org/)), and#include` 将其转换为字节数组初始化器(但您必须手动添加空终止符)。

【讨论】:

我写过字符串字面量大于 65535 字节,我来看看数组初始化技术。

以上是关于增加字符串文字长度限制的主要内容,如果未能解决你的问题,请参考以下文章

Android 限制输入框4个中文字符或12个英文字符

Android 限制输入框4个中文字符或12个英文字符

Mysql一个表中 最多能存多少文字? 一列中varchar最大值允许多少?

UITextField中文输入法输入时对字符长度的限制

excel函数字符串长度限制的使用方法有哪些?

symfony 2 twig 限制文字长度并放三个点