错误 C2026:字符串太大,尾随字符被截断。

4

我有一个大问题,不知道如何解决...

我想解码一个非常长的Base64编码字符串(980,000个字符),但每次调试时都会出现以下错误:

错误C2026:字符串太大,尾随字符被截断

我尝试过这种方法,但只能通过此方法比较两个字符串:

char* toHash1 = "LONG BASE 64 Code";
char* toHash2 = "LONG BASE 64 Code";

if (true) {
  sprintf_s(output, outputSize, "%s", base64_decode(toHash1 =+ toHash2).c_str());
}

有人知道我该怎么让它工作吗?

你的代码片段闻起来很像C++。所以你有意使用了C标签吗? - alk
2个回答

4
根据此处的文档,使用MSVC时,字符串字面量中只能包含大约2048个字符。通过连接可以获得多达65535个字符,但由于这仍然太短,因此不能在此处使用字符串字面量。

一个解决方案是将字符串从文件读入到一些分配的char缓冲区中。我不知道gcc和clang的任何限制,因此尝试使用它们而不是MSVC可能也可以解决此问题。


截至2022年底,Visual Studio中可连接的字符总数限制已大幅增加,甚至可能被消除。字符串字面量大小约束仍然存在(64kB)(请参见此处)。在编译器生成错误之前,我能够使用连接初始化一个超过3MB的字符串(致命错误C1060:编译器堆栈空间不足)。 - Jeff Leonard

3

您可以先将字符串转换为十六进制,然后像这样包含它:

char data[] = {0xde,0xad,0xbe,0xef};  //example

然后可以像字符串一样使用它,如果需要,附加空终止符。

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