我正在尝试读取文件,将值分配给结构成员,然后将值添加到动态内存分配中 . 我使用for循环读取所有值,然后将它们添加到动态数组中 . 它在编译时给了我错误 .
如何将值分配给Structure成员,同时将它们添加到动态数组?
我真的很感谢你的帮助!!谢谢 .
这是我的代码
struct Student
{
char *name[20];
char *gender[10];
int age;
char *course[20];
};
struct elements
{
struct Student *s;
struct elements *next;
};
FILE *file;
char c;
char type[30];
int main(int args, char *arg[])
{
struct Student *school = (struct Student *)malloc(sizeof(struct Student)); // Dynamic array
file = fopen(arg[1], "r"); // reading file
if(file != NULL)
{
while((c = fgetc(file)) != EOF) putchar(c);
{
int size;
int r;
for (r=0; r<size;r++)
{
fscanf("Name: %s", school->name);
//school->name = Addstudent(); // didn't work
//printf("names are: %s\n",school->name); // here I want to make sure the value name is in the array
}
}
}
else
{
printf("Unable to open file \n");
}
free(file);
return 0;
}
char* Addstudent()
{
char* name;
fscanf(file, "Name: %s",type ,name);
return name;
}
这是错误
在函数'main'中:Latest1.c:59:4:警告:从不兼容的指针类型传递'fscanf'的参数1 [默认启用] /usr/include/stdio.h:449:12:注意:预期' struct FILE * restrict'但是参数的类型为'char *'Latest1.c:59:4:警告:从不兼容的指针类型[默认启用]传递'fscanf'的参数2 /usr/include/stdio.h:449 :12:注意:预期'const char * restrict'但参数类型为'char **'Latest1.c:59:4:警告:格式不是字符串文字而且没有格式参数[-Wformat-security]
2 回答
对于初学者来说,这段代码可能没有按照你想要的去做:
通过修复格式,您可以看到它被评估为
while
循环仅包含putchar(c)
,并且在达到EOF后,大括号内的代码将仅执行一次 .将调用混合到
fgetc()
和fscanf()
通常也是一个坏主意 . 将一行一行读入变量,然后解析变量中的数据会更安全:当你读完文件后,你需要
fclose
它,而不是free
它 .最后,虽然您已为
Student
结构中的元素分配了内存,但您尚未为name
,gender
和course
指针指向的数据分配空间 .你的代码有很多错误;
你真的明白这是什么声明了吗?
char * name [20]
真的仔细看这一行,这既不是一个数组,也不是你想要做的:struct Student * school =(struct Student *)malloc(sizeof(struct Student)); //动态数组
阅读
fscanf
的文档(抱歉,如果格式化已关闭,仍然可以掌握新手机)