我无法在 c 语言中读取另一个结构

欢乐满人间

我正在尝试读取包含另一个结构的结构,然后将其写入二进制文件。但是,当我检查结构是否从键盘读取良好时,结构 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你打算的记忆。结果,后面的代码会在分配的内容结束之后进行写入和读取,这具有未定义的行为。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

结构中的一个元素可以在C语言中访问其自身的另一个元素吗?

在C语言中,为什么我可以看到在另一个变量之后的数组末尾写入的值?

从C ++中的另一个线程读取指针

在C语言中,您可以基于另一个常量定义一个常量吗?

如何将用另一个项目的C语言编写的源代码包含到Visual Studio中的C ++中我自己的项目中

C#读取另一个进程内存

我如何从C ++中的另一个函数循环一个函数

C语言中学生的单链接列表,无法访问另一个函数中创建的节点中的所有字段

我可以从kivi语言中的一个窗口小部件引用另一个窗口小部件的属性吗?

如何编写和读取包含C中另一个结构的结构?

包含对另一个结构的引用的C结构

我正在尝试将此代码分成两个.c和一个.h文件,但是该结构没有被另一个.c文件访问

无法从Visual Studio C ++中的另一个类访问一个类

我是C ++的初学者。我在Visual Studio 2019(C ++ 17)中研究它,我已经在.h文件中定义了一个类,但是在另一个.h文件中我无法使用它

在C语言中,如何评估一个函数或另一个函数中的局部变量?

无法读取C语言的文件。它创建一个新文件,而不是读取它

基于C语言中另一个数组的char数组的奇怪长度和内容

另一个无法读取回调上的道具

我如何将结构指针数组中的结构直接复制到 c 中的另一个结构

C++:无法将结构数组中的 double 与 if 函数中的另一个 double 进行比较

C# - 我似乎无法将数组传递给不同的方法,一个用于初始化,另一个用于修改?

C 语言:将数据从一个 typedef 结构复制到另一个并返回一个值

(C 语言)我可以在另一个 fopen 指令中使用 fopen 指令吗?

c ++ udp广播。我需要一个套接字来读取和另一个发送吗?

如何在数组中找到一个值并将其复制到 C 语言中的另一个值?

我想访问 C 中另一个结构字段内的通用结构字段

如何在C语言中调用另一个用户定义函数中的用户定义函数?这个程序有错误...请告诉我那是什么?

我无法理解 C 语言中宏函数的结果

你能在 C 语言的另一个结构中创建一个 Structure 数组吗?