我有很多大于65535字节的字符串文字。我不允许将这些字符串保存到单独的文件中,如何解决字符串限制?
https://stackoverflow.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
答案 0 :(得分:1)
您可以将文本字符串拆分为多个字符串。以下代码适用于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字节
答案 1 :(得分:1)
这些大字符串看起来更像是资源而不是代码,我会使用windows二进制文件的资源部分(FindResource / LoadResource)和SO: embedding resources into linux executable的答案来将相同的数据插入到linux中。
答案 2 :(得分:0)
尝试使用数组。
https://msdn.microsoft.com/en-us/library/81k8cwsz.aspx
数组的最大大小由size_t定义。在头文件STDDEF.H中定义,size_t是一个无符号的int,范围为0x00000000到0x7CFFFFFF。
答案 3 :(得分:-3)
Microsoft documentation表示使用连接(即写"a" "b" "c"
而不是"abc"
)允许您将限制增加到大约64 KiB字节。但这对您的用例来说还不够。
如果没有,您可以单独保存字符串,使用xxd -i
(xxd comes with [vim](http://www.vim.org/)), and
#include`将其转换为字节数组初始值设定项(但您必须添加空终止符)手动地)。