【发布时间】:2020-07-01 18:49:40
【问题描述】:
我想读取我编写的 .bin 文件。我在 .bin 文件中写了一个整数和 3 个结构。当我尝试从中读取时,出现错误:
Run-Time Check Failure #2 - Stack around the variable 'A' was corrupted. occurred
这是我的结构:
typedef struct videoteka {
char naslov[50];
char glumac[50];
char vrsta[40];
long int rBroj;
}FILM;
这是我写入 .bin 文件的方式:已修复并再次写入文件
int main()
{
FILM* film = malloc(3 * sizeof(*film));
strcpy(film[0].naslov, "Nana");
strcpy(film[0].glumac, "Goran");
strcpy(film[0].vrsta, "Komedija");
film[0].rBroj = 123456;
strcpy(film[1].naslov, "Blabla");
strcpy(film[1].glumac, "Mirko");
strcpy(film[1].vrsta, "Horor");
film[1].rBroj = 6467347;
strcpy(film[2].naslov, "Tanana");
strcpy(film[2].glumac, "Ivan");
strcpy(film[2].vrsta, "Drama");
film[2].rBroj = 8421841;
FILE* fPt = fopen("filmovi.bin", "wb");
int n = 3;
fwrite(&n, sizeof(int), 1, fPt);
fwrite(&film, sizeof(FILM), 3, fPt);
fclose(fPt);
return 0;
}
这就是我试图从中读取的方式:
FILM* ucitavanjeFilmova(char fileName[20], int n)
{
FILM *(A[3]);
for (int i = 0; i < 3; i++)
A[i] = (FILM*)malloc(sizeof(FILM));
FILE* fPt = fopen(fileName, "rb");
fseek(fPt, 5, SEEK_SET);
fread(&A, sizeof(FILM), 3, fPt);
fclose(fPt);
return A;
}
我首先尝试为 FILM 类型的 n(在本例中为 3)结构分配内存。然后我尝试读取 3 个结构并将它们存储到指针 A 的地址。之后我返回指针 A。我正在使用 fseek,因为在所有结构之前将一个整数写入文件。
【问题讨论】:
-
一方面,
FILM *(film[3]);应该是FILM *film[3];用于读取过程的数组无论如何都与用于输出的数组不匹配。读取时,三个malloc都写入同一个变量A。 -
这是否意味着我的 .bin 文件甚至没有被正确写入? .bin 文件不是用我要问的这个程序代码编写的。它是写在我上面发布的第一个代码块上的。有没有可能它一开始就没有将结构正确地写入 .bin 文件?将 A 更正为 A[i],仍然给我同样的错误..
-
@WeatherVane 的区别?
-
我建议在这种只有 3 条记录的情况下(建议!),您可以使用文件转储制表符检查输出文件。
-
在我看来你正在写指向文件的指针......不好
标签: c struct integer binaryfiles fread