C -在二进制文件中添加一个整数数组



我必须添加一个int数组作为参数传递到二进制文件中作为函数的参数。在函数的参数中也有数组的大小。如果文件为空,则写入数组,但如果文件已经包含数组,则将两个数组连接起来。我担心的是,在每次执行时,都会向我报告一个崩溃。下面是我的代码:

void appendIntArray(char* filename, int* array, int N){                                          

int* buffer = (int*) malloc(sizeof(int)*200);                                            
FILE* fp;                                            

if(fp == NULL) {                                             
return(N);                                           
}                                            

fp = fopen(filename, "rb");                                          
fread(N, sizeof(int), 1, fp);                                            
fread(buffer, sizeof(int), N, fp);                                           
fclose(fp);                                          

fp = fopen(filename, "wb");                                          
fwrite(&N, sizeof(int), 1, fp);                                          
fwrite(buffer, sizeof(int), 1, fp);                                          
fwrite(array, sizeof(int), N, fp);                                           

fclose(fp);                                          
return(N, buffer,array);                                             
}                                            

'谁能告诉我为什么我的程序崩溃并纠正我。

如果文件为空,则应该有一个数组。如果文件已经包含一个数组,我应该将两个数组连接起来。

在分配缓冲区之前,从文件中读取当前长度。将N添加到其中以获得最终结果数组的大小,并在malloc()中使用它。然后您可以使用memcpy()将新数组复制到旧文件内容后面的缓冲区末尾。

要将新的N返回给调用者,将此参数作为指针传递。

在检查fp是否为空之前,需要调用fopen()

要返回新的文件内容数组,必须声明函数返回int *,而不是void

char *appendIntArray(char* filename, int* array, int *N){
FILE* fp = fopen(filename, 'rb');
if(!fp) {
return NULL;
}
int currentsize;
fread(&currentsize, sizeof(int), 1, fp);
int* buffer = (int*) malloc(sizeof(int)*(currentsize + *N));
if (!buffer) {
return array;
}
fread(buffer, sizeof(int), currentsize, fp);
fclose(fp);
fp = fopen(filename, "wb");
if (!fp) {
return NULL;
}
memcpy(&buffer[currentsize], array, N * sizeof(int));
*N += currentsize;
fwrite(N, sizeof(int), 1, fp);
fwrite(buffer, sizeof(int), *N, fp);
fclose(fp);
return buffer;
}

相关内容

  • 没有找到相关文章

最新更新