对于 fread 读取的许多字符
To many char read by fread
我正在尝试以二进制模式打开文件并将内容写入 C++ 中的缓冲区。
我为此使用 fread
。但是出了点问题。
我的代码是:
FILE * in = fopen("in", "rb");
_in = new unsigned char [length_in];
fread(_in, sizeof(char), length_in, in);
调试时我可以看到 _in = unsigned char * "Asdfghjkl\x1f \x10"
.
重建程序时,\x1f \x10
部分随机变化或消失。
我期待的总是_in = unsigned char * "Asdfghjkl"
。
当用 9
替换 length_in
时,我仍然得到类似 "Asdfghjkl\x1f \x10"
的结果。
我错过了什么。我正在使用 Mac 和 Xcode.
您的数组是在未初始化的情况下创建的,因此这些都是之前内存中的垃圾值。像这样将其初始化为零:
_in = new unsigned char [length_in]();
还有fread
returns读取的字节数。如果您将其视为字符串,请确保结果为 null-terminated.
我正在尝试以二进制模式打开文件并将内容写入 C++ 中的缓冲区。
我为此使用 fread
。但是出了点问题。
我的代码是:
FILE * in = fopen("in", "rb");
_in = new unsigned char [length_in];
fread(_in, sizeof(char), length_in, in);
调试时我可以看到 _in = unsigned char * "Asdfghjkl\x1f \x10"
.
重建程序时,\x1f \x10
部分随机变化或消失。
我期待的总是_in = unsigned char * "Asdfghjkl"
。
当用 9
替换 length_in
时,我仍然得到类似 "Asdfghjkl\x1f \x10"
的结果。
我错过了什么。我正在使用 Mac 和 Xcode.
您的数组是在未初始化的情况下创建的,因此这些都是之前内存中的垃圾值。像这样将其初始化为零:
_in = new unsigned char [length_in]();
还有fread
returns读取的字节数。如果您将其视为字符串,请确保结果为 null-terminated.