gpt4 book ai didi

c - 我无法用c语言读取另一个结构

转载 作者:太空宇宙 更新时间:2023-11-04 06:48:51 25 4
gpt4 key购买 nike

我正在尝试读取一个包含另一个结构的结构,然后将其写入二进制文件。但是,当我检查结构是否从键盘上正确读取时,结构 FIRMA 未正确读取。 'nrang' 的值始终为 0,'localitate' 字符串非常奇怪。这是我的代码:

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


typedef struct
{
char localitate[10];
int nrang;
} FIRMA;

typedef struct
{
char nume[20];
int varsta;
FIRMA firma;
} ANG;


int main()
{
FILE* f;
ANG* a;
int n,i;
if ((f=fopen("fis.txt","wb"))==NULL) exit(1);
printf("number?\n");
scanf("%d",&n);
a=(ANG*)malloc(n*sizeof(ANG*));
printf ("Dati valorile");
for (i=0; i<n; i++)
{
scanf("%s%d",&a[i].nume,&a[i].varsta);
scanf("%s",&a[i].firma.localitate);
scanf("%d",&a[i].firma.nrang);
fwrite(&a[i],sizeof(a[0]),1,f);
printf("%s\n%d\n%s\n%d\n",a[i].nume,a[i].varsta,a[i].firma.localitate,a[i].firma.nrang);

}



}

最佳答案

请注意 sizeof(ANG*)sizeof(ANG) 不同(前者是指针的大小——可能是 8——而后者是结构的大小——可能是 40),这意味着您只分配了大约 1/5 的内存。因此,后面的代码最终会写入和读取已分配内容的末尾,这具有未定义的行为。

在分配指针 ptr 时养成使用 sizeof(*ptr) 的习惯,这将始终为您提供它指向的内容的大小,因此您不必考虑“这里我需要 sizeof(ANG) 还是 sizeof(ANG*)?”。这在分配多维数组时特别有用(例如 int ***three_d_array = malloc(n * sizeof(*three_d_array)))。

关于c - 我无法用c语言读取另一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54318704/

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