【发布时间】:2022-08-18 23:54:22
【问题描述】:
下面的代码创建了一个包含chars 向量的向量。它打开一个fstream 到一个文件。然后从第一个向量写入第一个char。我尝试了编写字符的方法。最后,我尝试打开一个新的 \'fstream\' 并从中打印我写的内容。文件的打印和简单检查都显示它没有任何内容,或者有时是垃圾(取决于writes 的顺序)。没有错误或任何错误的输出出现。我真的为此失去了理智。
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int main()
{
std::vector<char> y(6, 0);
y[0] = 1;
std::vector<std::vector<char>> vy;
vy.push_back(y);
std::fstream dateir(\"ffff.dat\", std::ios::out | std::ios::out | std::ios::binary);
dateir<<vy[0][0] << endl;
int temp = vy[0][0];
dateir.write((char *)&temp, sizeof(int));
dateir.close();
cout << \"here\" << endl;
std::ifstream dateir2(\"ffff.dat\", std::ios::out | std::ios::out | std::ios::binary);
if (dateir2.is_open())
{
std::cout << dateir2.rdbuf();
}
else{
cout << \"no\";
}
dateir2.close();
cout << \"end\";
return 0;
}
-
您是否已在调试器中单步执行代码以找出垃圾数据的写入位置?
-
dateir.write((char *)&temp, sizeof(int));写入二进制数据,它不会被人类阅读或作为文本打印。向量中的数据也不是可打印的字符。 -
@RetiredNinja 我想写的数据是枯萎的二进制文件。我只是出于调试目的查看该文件(我还使用了
txt后缀)。关于可打印字符 - 我从可以正常工作的代码中获取矢量定义(当我尝试更改写入命令时出现错误)。 -
听起来不知道如何使用调试器会让您陷入困境。也许是时候学习了?
-
正如我所说,除了换行符之外,您写入文件的所有数据都是可打印的,因此
std::cout << dateir2.rdbuf();打印 \"garbage\" 是完全可以预期的。如果你用十六进制编辑器查看文件,你会看到。 godbolt.org/z/1fhdnzsxr