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