c++ - 将具有空值的字符数组写入文件流

标签 c++ null stream

我是 C++ 的新手,仍在研究文件流。我正在尝试将一个字符数组放入一个我将使用十六进制编辑器查看的文件中。

我做了不同的字符串,但每当我输入一个空字节时,文件就结束了。

ofstream stream;
char charArray[256];
for (int i = 0; i <= 255; i++)charArray[i] = i;
stream.open("C:\\testfile.myimg");
if (!stream.is_open()) exit(1);
stream << charArray << endl;
return 0;

我想输出值递增的字节,但如果我以空字节开始,那么 c++ 认为字符数组在开始之前就结束了

最佳答案

代替:

stream << charArray << endl;

使用:

stream.write(charArray, sizeof(charArray));
stream.write("\n", 1);  // this is the newline part of std::endl
stream.flush();         // this is the flush part of std::endl

第一个假定您正在发送一个 null-terminated 字符串(因为您正在传递一个 char* - 请参阅答案结尾的原因)。这就是为什么当代码遇到第一个值为 0char,即 '\0'(空终止符)时,它会停止.

另一方面,第二种方法使用未格式化的输出写入,它不会关心 charArray 中的值 - 它会将它(作为指向其第一个元素的指针)并写入 sizeof(charArray) bytes 从指向 stream 的指针开始。这是安全的,因为它保证 sizeof(char) == 1,因此 sizeof(charArray) 将产生 256

您需要考虑的是数组衰减。在这种情况下它会起作用(sizeof 事情),但如果您只是将一个衰减的指针传递给数组的第一个元素,它就不会起作用。在这里阅读更多:what's array decaying?

关于c++ - 将具有空值的字符数组写入文件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56878047/

相关文章:

C++:tr1::bind 问题 (C2065)

c++ - 将返回类型推导为模板参数

c++ - 跟踪打开特定文件的进程

php - PHP递减NULL值问题

html - ffmpeg 流桌面代替 -i/dev/video0

c++ - 甚至在执行第一行 `main()` 之前就出现段错误,并且没有非局部变量

ios - nil __weak self - 为什么会这样?

javascript - "Cannot read property ' xxx ' of null"

c# - 无法通过 TCP/Sockets .net 退出具有多个缓冲区传输的循环

Java 需要帮助来关闭 Stream