C 为结构的指针赋值

C 为结构的指针赋值,c,C,我试图给我的_记录赋值,但编译器一直指示我的行my_record->x=计数器;正在发生错误: 使用了未初始化的局部变量“my_record” 你有几个问题 首先,您没有为指向的my_记录分配内存。关于使用未初始化变量的警告是因为您没有执行以下操作: abc my_record = malloc(sizeof(struct rec)); 其次,fwrite的第一个参数应该是指向要编写的结构的指针,但您使用的是指向该指针的指针 第三,fwrite的第二个参数应该是结构的大小,但您给出的是指针的大

我试图给我的_记录赋值,但编译器一直指示我的行my_record->x=计数器;正在发生错误:

使用了未初始化的局部变量“my_record”


你有几个问题

首先,您没有为指向的my_记录分配内存。关于使用未初始化变量的警告是因为您没有执行以下操作:

abc my_record = malloc(sizeof(struct rec));
其次,fwrite的第一个参数应该是指向要编写的结构的指针,但您使用的是指向该指针的指针

第三,fwrite的第二个参数应该是结构的大小,但您给出的是指针的大小

首先,似乎没有任何理由将abc定义为指针。您应该只声明一个包含结构本身的变量

#include<stdio.h>

typedef struct rec
{
    int x, y, z;
} abc;

int main()
{
    int counter;
    FILE *ptr_myfile;
    //struct rec my_record;
    abc my_record;

    ptr_myfile = fopen("test.bin", "wb");
    if (!ptr_myfile)
    {
        printf("Unable to open file!");
        return 1;
    }
    for (counter = 1; counter <= 10; counter++)
    {
        my_record.x = counter;
        fwrite(&my_record, sizeof my_record, 1, ptr_myfile);
    }
    fclose(ptr_myfile);
    system("pause");
    return 0;
}
试试这个:

// Include this
#include <stdlib.h>

typedef struct rec {
    int x, y, z;
} abc;

int main() {
    ...

    abc *my_record = (abc*) malloc( sizeof(abc) );

    ...
}

代码中有两个问题,比如

在本abc my_记录中;abc是struct rec*,编译器正确地抱怨我的_记录没有初始化。看起来

结构记录*我的记录;/*未初始化的结构ptr*/

因此,首先为它分配内存,如下所示

abc my_记录=mallocsizeofstruct记录

这里是fwrite&my_record,sizeofabc,1,ptr_myfile;第二个参数sizeofabc是错误的,因为abc是结构指针,它不会产生正确的结果。另外,fwrite的第一个论点是错误的,因为它应该是指向结构my_记录而不是&my_记录的指针

fwritemy_记录,sizeofstruct记录,1,ptr_我的文件

而且,您还希望看到,在阅读了这个链接之后,您可能希望避免使用typedef作为指针,正如您在代码中所做的那样&您希望像下面这样做

typedef struct rec {
    int x, y, z;
}abc;
int main(void) {
    int counter;
    FILE *ptr_myfile;
    abc *my_record = malloc(sizeof(struct rec));
    ptr_myfile = fopen("test.bin", "wb");
    if (!ptr_myfile) {
        printf("Unable to open file!");
        return 1;
    }
    for (counter = 1; counter <= 10; counter++) {
        my_record->x = counter;
        fwrite(my_record, sizeof(abc), 1, ptr_myfile);
    }
    fclose(ptr_myfile);
    return 0;
}

您从未为我的_记录分配任何要指向的内存。为什么要使用指针而不仅仅是常规结构;还可以看到,虽然这可能并不明显,但在这段代码中,您加载了枪,瞄准您的脚,然后开火。abc是一个随机指针,它从来没有正确初始化过,当您使用它时,您会遇到未定义的行为。了解您已将abc定义为指向struct rec的指针类型非常重要。这就是为什么@tadman说我的_记录是一个随机指针。
typedef struct rec {
    int x, y, z;
}abc;
int main(void) {
    int counter;
    FILE *ptr_myfile;
    abc *my_record = malloc(sizeof(struct rec));
    ptr_myfile = fopen("test.bin", "wb");
    if (!ptr_myfile) {
        printf("Unable to open file!");
        return 1;
    }
    for (counter = 1; counter <= 10; counter++) {
        my_record->x = counter;
        fwrite(my_record, sizeof(abc), 1, ptr_myfile);
    }
    fclose(ptr_myfile);
    return 0;
}