我尝试为my_record
分配值,但编译器一直指示我的行my_record->x = counter;
出错:
未初始化的本地变量' my_record'使用
#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(abc), 1, ptr_myfile);
}
fclose(ptr_myfile);
system("pause");
system("pause");
return 0;
}
答案 0 :(得分:3)
你有几个问题。
首先,您没有为my_record
分配内存指向。关于使用未初始化变量的警告是因为你没有这样做:
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;
}
答案 1 :(得分:3)
您的代码中存在几个问题,例如
在此abc my_record;
abc
为struct rec*
,编译器正在抱怨my_record
未初始化。看起来像是
struct rec *my_record; /* un-initilized struct ptr */
首先为它分配内存,如
abc my_record = malloc(sizeof(struct rec));
在fwrite(&my_record, sizeof(abc), 1, ptr_myfile);
中,第二个参数sizeof(abc)
是错误的,因为abc
是结构指针,它不会产生正确的结果。另外,fwrite()
的第一个论点是错误的,因为它应该指向结构my_record
而不是&my_record
。
fwrite(my_record, sizeof(struct rec), 1, ptr_myfile);
此外,您还希望看到Is it a good idea to typedef pointers?阅读此链接后,您可能希望避免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;
}
答案 2 :(得分:1)
试试这个:
// Include this
#include <stdlib.h>
typedef struct rec {
int x, y, z;
} abc;
int main() {
...
abc *my_record = (abc*) malloc( sizeof(abc) );
...
}