我对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 ++会认为字符数组在开始之前就结束了
答案 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*
-参见答案的结尾)。这就是为什么当代码遇到第一个char
值0
(即'\0'
(空终止符))时,它会停止的原因。
另一方面,第二种方法使用未格式化的输出写入,该输出不会关心charArray
中的值-它将使用它(作为指向其第一个元素的指针)并写入{{1} }从该指针到sizeof(charArray)
的 bytes 。这是安全的,因为可以保证stream
,因此sizeof(char) == 1
会产生sizeof(charArray)
。
您需要考虑的是阵列衰减。在这种情况下,它可以工作(256
),但是,如果您仅将衰减的指针传递给数组的第一个元素,则它将无法工作。在此处阅读更多信息:what's array decaying?