我是 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*
- 请参阅答案结尾的原因)。这就是为什么当代码遇到第一个值为 0
的 char
,即 '\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/