将数组保存到二进制文件不能正常工作c ++

时间:2018-01-10 18:10:32

标签: c++ arrays

我在c ++中有一个unsigned char数组,我想把它保存到一个文件中。

例如,如果我有下面的数组

arr[0] = 0;
arr[1] = 1;
arr[2] = 2;

我想将其保存到文件中,以便文件的二进制数据看起来像这样(没有空格)。

00000000 00000001 00000010

我在下面尝试过这段代码,但它似乎没有用。我给程序一个大小为0字节的空白文件,程序运行后,文件大小保持0字节(没有任何内容写入)。

// Create unsigned char array
unsigned char *arrayToWrite= (unsigned char*)malloc(sizeof(unsigned char)*720);

// Populate it with some test values
arrayToWrite[0] = 0;
arrayToWrite[1] = 1;
arrayToWrite[2] = 2;

// Open the file I want to write to
FILE *dat;
dat = fopen("filePath.bin", "wb");

// Write array to file
fwrite(&arrayToWrite, sizeof(char)*720, 1, dat);
fclose(dat);

我希望在这个程序运行之后文件" filePath.bin"除了填充测试数据的第一和第二位置之外,长度为720字节,大部分为0。

我做错了什么?任何帮助将非常感激!谢谢!

2 个答案:

答案 0 :(得分:3)

基本问题是你将指针传递给arrayToWrite变量,而不是数组本身。将fwrite(&arrayToWrite...更改为fwrite(arrayToWrite...

BTW,malloc()不承诺给你零内存。为此,使用calloc()分配内存或将memset()分配给零已分配的内存。 (虽然所有这些都是C的东西;对于C ++,你最好使用std::vector而不是原始C数组。)

答案 1 :(得分:2)

C ++代码的编写方式不同:

std::vector<unsigned char> vectorToWrite = { 0, 1, 2 };
vectorToWrite.resize( 720 );
std::ofstream file( "filePath.bin", std::ios::out | std::ios::binary );
if( !file ) {
    // error handling
}
file.write( vectorToWrite.data(), vectorToWrite.size() * sizeof( decltype(vectorToWrite)::value_type ) );

注意:我将sizeof( decltype(vectorToWrite)::value_type )放在那里,如果您稍后更改了矢量数据,它仍然可以正常工作而无需进一步更改,但在char的情况下,它可以完全省略,因为sizeof(char)是总是等于1

相关问题