提问人:redneck10 提问时间:12/17/2022 最后编辑:ptsredneck10 更新时间:12/17/2022 访问量:200
C - 在二进制文件中添加整数数组
C - Add an array of integers in a binary file
问:
我必须在二进制文件中添加一个作为参数传递的 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);
}
` 有人可以告诉我为什么我的程序崩溃并纠正我。
如果文件是空的,我们应该有一个数组。如果文件已经包含一个数组,我应该连接两个数组。
答:
1赞
Barmar
12/17/2022
#1
在分配缓冲区之前,请从文件中读取当前长度。与此相加可得到最终结果数组的大小,并在 中使用它。然后,您可以使用将新数组复制到旧文件内容之后的缓冲区末尾。N
malloc()
memcpy()
若要将 new 返回给调用方,请将此参数作为指针传递。N
您需要先调用,然后再检查是否为 null。fopen()
fp
要返回新的文件内容数组,您必须声明要返回的函数,而不是 。int *
void
char *appendIntArray(char* filename, int* array, int *N){
FILE* fp = fopen(filename, 'rb');
if(!fp) {
return NULL;
}
int currentsize;
fread(¤tsize, 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;
}
评论
void
fread()
N
&N
fread
printf("%d %d %d" ,&N, &buffer, &tab);
%p
%d
tab