到fread读取的多个字符 我试图用二进制模式打开文件,并将内容写入C++中的缓冲区。 我正在为此使用fread。但是出了点问题。 我的代码是: FILE * in = fopen("in", "rb"); _in = new unsigned char [length_in]; fread(_in, sizeof(char), length_in, in);
调试时,我可以看到到fread读取的多个字符 我试图用二进制模式打开文件,并将内容写入C++中的缓冲区。 我正在为此使用fread。但是出了点问题。 我的代码是: FILE * in = fopen("in", "rb"); _in = new unsigned char [length_in]; fread(_in, sizeof(char), length_in, in);,c++,fstream,ofstream,C++,Fstream,Ofstream,调试时,我可以看到\u in=unsigned char*“Asdfghjkl\x1f\x10” 重建程序时,零件\x1f\x10会随机更改或消失 我所期望的总是\u in=unsigned char*“Asdfghjkl” 当用9替换中的length\u时,我仍然会得到类似“Asdfghjkl\x1f\x10” 我错过了什么。我使用的是Mac和Xcode。您的数组是在未初始化的情况下创建的,所以这些都是内存中的垃圾值。将其初始化为零,如下所示: _in = new unsigned char
\u in=unsigned char*“Asdfghjkl\x1f\x10”
重建程序时,零件\x1f\x10
会随机更改或消失
我所期望的总是\u in=unsigned char*“Asdfghjkl”
当用9
替换中的length\u时,我仍然会得到类似“Asdfghjkl\x1f\x10”
我错过了什么。我使用的是Mac和Xcode。您的数组是在未初始化的情况下创建的,所以这些都是内存中的垃圾值。将其初始化为零,如下所示:
_in = new unsigned char [length_in]();
另外,fread
返回读取的字节数。如果将其视为字符串,请确保结果以null结尾。您读取的是字节,而不是字符串。所以零终止符不见了。如果要这样做,请不要忽略fread()的返回值。不要忽略fread
的返回值。它包含重要信息,比如实际读取了多少数据。