我试图编写代码将二进制文件读入缓冲区,然后将缓冲区写入另一个文件。我有以下代码,但是缓冲区仅存储来自文件第一行的几个ASCII字符,没有其他内容。
int length;
char * buffer;
ifstream is;
is.open ("C:\\Final.gif", ios::binary );
// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
is.read (buffer,length);
is.close();
FILE *pFile;
pFile = fopen ("C:\\myfile.gif", "w");
fwrite (buffer , 1 , sizeof(buffer) , pFile );
ios::binary
方式读取,按照您的建议添加零终止符是没有意义的。此外,在这里使用char
或unsigned char
之间的区别并不重要,因为代码并没有尝试解释文件内容。 上述代码的问题在于sizeof(buffer)
的值为4或8(32/64位指针)。因此,它总是向输出文件写入4/8个字节。 作者应该使用length
而不是sizeof(buffer)
。 - Simon Rozmanios::binary
,像你建议的那样添加零终结符是毫无意义的。在这里使用char
或unsigned char
的区别并不大,因为代码并不试图解释文件内容。 上述代码的问题在于sizeof(buffer)
是4或8(32/64位指针)。因此,它总是向输出文件写入4/8个字节。 作者应该使用length
而不是sizeof(buffer)
。 - undefined