C++ string too big, trailing characters truncated(C++字符串太大,尾随字符被截断)
问题描述
我正在编写一个程序,该程序在启动时会将预定义的字符串写入文件。该文件的大小约为5MB,因此在祸不单行中用5MB的数据填充字符串是一个很大的变量。当我试图编译它时,我得到一个错误,说字符串太大。5MB真的有那么大吗?我把绳子分成4段,但每段都太大了。:/我可以快速轻松地做些什么来解决此问题。
注意:我认为自己是初级程序员,所以请不要做得太过分:p
我如何将字符串写入文件的示例:
string file_hex("huge_a**_string_goes_here_or_in_separate_cpp");
ofstream file_out;
file_out.open("tools\c.exe", ios::binary | ios::trunc);
string res;
res.reserve(file_hex.size() / 2);
for (int i = 0; i < file_hex.size(); i += 2)
{
std::istringstream iss(file_hex.substr(i, 2));
int temp;
iss >> std::hex >> temp;
res += static_cast<char>(temp);
}
file_out << res;
file_out.close();
推荐答案
标准没有指定字符串文字的最大限制,但建议了最小大小。来自附件B-实施数量
这些限制可能会约束数量,包括下面描述的数量或其他数量。建议将每个数量后面的括号数字作为该数量的最小数量。但是,这些数量只是指导方针,并不能确定是否符合要求。
- 字符串中的字符(连接后)[65 536]。
但是,标准中的同一节还规定了以下内容
因为计算机是有限的,所以C++实现不可避免地受到它们能够成功处理的程序大小的限制。在已知的情况下,每个实现都应记录这些限制。本文档可能会引用固定限制(如果存在),说明如何根据可用资源计算可变限制,或者说固定限制不存在或未知。
可以安全地假设5MB的字符串文字将超过编译器施加的最大限制。您应该参考工具链的文档,以确定对字符串文字施加的限制。
如果您使用的是Visual C++编译器,则字符串文字的最大大小为16,384字节。从MSDN documentation
字符串文字的最大长度为16384(16K)字节。此限制适用于char[]和wchar_t[]类型的字符串。如果字符串文字由用双引号括起来的部分组成,则预处理器会将这些部分连接成单个字符串,并且对于连接的每一行,它会在总字节数中添加一个额外的字节。
这篇关于C++字符串太大,尾随字符被截断的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C++字符串太大,尾随字符被截断


基础教程推荐
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 设计字符串本地化的最佳方法 2022-01-01