gpt4 book ai didi

c - C 中的文件问题

转载 作者:行者123 更新时间:2023-11-30 20:18:41 24 4
gpt4 key购买 nike

我正在尝试编写函数来帮助我保存和加载文件...但是当我尝试从文件中保存数组时,它与我加载到文件中的原始数组不匹配。这是我的代码。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

#include "intarr.h"

/* LAB 6 TASK 1 */

/*
Save the entire array ia into a file called 'filename' in a binary
file format that can be loaded by intarr_load_binary(). Returns
zero on success, or a non-zero error code on failure. Arrays of
length 0 should produce an output file containing an empty array.
*/

int intarr_save_binary( intarr_t* ia, const char* filename )
{
FILE* f = fopen( "filename", "wb" );

if( f == NULL )
{
return 1;
}

if( fwrite( &ia->len, sizeof( int ), 1, f ) != 1 )
{
return 1;
}

if( fwrite( &ia->data, sizeof( int ), ia->len, f ) != ia->len )
{
return 1;
}

fclose( f );

return 0;
}

/*
Load a new array from the file called 'filename', that was
previously saved using intarr_save_binary(). Returns a pointer to a
newly-allocated intarr_t on success, or NULL on failure.
*/

intarr_t* intarr_load_binary( const char* filename )
{
if( filename == NULL )
{
return NULL;
}

FILE* f = fopen( "filename", "rb" );

if( f == NULL )
{
return NULL;
}

int len;

if( fread( &len, sizeof( int ), 1, f ) != 1 )
{
return NULL;
}

intarr_t* new_ia = intarr_create( len );

fread( new_ia->data, sizeof( int ), len, f );

fclose( f );

return new_ia;
}

另外要明确的是 intarr_t ia 只是一个带有 ia->data (数组)和 ia->len (数组的 len)的结构

最佳答案

在此行中,您正在写入指针的内容,而不是它指向的数据。如果长度足够,您可能会在其后面写入其他随机数据,但会出现未定义的行为:

fwrite( &ia->data, sizeof( int ), ia->len, f )

问题在于您通过获取 ia->data 的地址添加了一层额外的重定向。看起来您刚刚遇到了复制粘贴错误或其他错误。删除&:

fwrite( ia->data, sizeof( int ), ia->len, f )

关于c - C 中的文件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53403821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com