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

时间:2019-07-03 21:17:34

标签: 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 ++会认为字符数组在开始之前就结束了

1 个答案:

答案 0 :(得分:2)

代替:

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

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

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

您需要考虑的是阵列衰减。在这种情况下,它可以工作(256),但是,如果您仅将衰减的指针传递给数组的第一个元素,则它将无法工作。在此处阅读更多信息:what's array decaying?