我修好了!
typedef struct student
{
char id[11];
}Student;
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char **argv){
int input = 0, i = 0;
FILE * fp = fopen("student.txt", "wt");
if (fp == NULL) {
printf("Error to open student.txt");
return -1;
}
scanf("%d",&input);
student = (Student *)malloc(input*sizeof(Student));
for(i=0;i<input;i++){
strcpy(student[i].id, "a"); // A is just for default.
fprintf(fp,"%s\n",student[i].id);
}
fclose(fp);
return 0;
}
我已经修改了评论和善意的答案。 它确实有效
感谢您的帮助
我真的很感激!这真的很有用。
答案 0 :(得分:5)
一些注意事项:
使用:
for (i=0; i<input; i++)
student = ...
您反复覆盖student
。
这就像在做:
x = 5;
x = 6;
x = 7;
...
不仅如此,在此过程中,您还会对自己造成大量内存泄漏。
使用student = malloc(...)
,您在每次迭代时分配一个新的内存块,然后将此变量设置为指向该内存块,同时“忘记”前一个(您将无法再解除分配)
答案 1 :(得分:1)
这strcpy(student[i].id, "")
没有任何意义。您的编译器应该为此提供编译器错误,或者它配置错误/损坏。
要为字符串指定值,请使用Student* student = malloc( sizeof(Student[input]) );
。
另外,正如有人指出的那样,malloc不应该在循环中。只需删除第一个for循环并使用一个malloc调用。并且不要从malloc中投出结果,因为这样做毫无意义。
free(student)
在课程结束时(学校开学时)添加<div class="row">
<div class="col-md-4 col-sm-6 col-xs-12">...</div>
<div class="col-md-4 col-sm-6 col-xs-12">...</div>
<div class="col-md-4 col-sm-6 col-xs-12">...</div>
</div>
<div class="row">
<div class="col-md-4 col-sm-6 col-xs-12">...</div>
<div class="col-md-4 col-sm-6 col-xs-12">...</div>
<div class="col-md-4 col-sm-6 col-xs-12">...</div>
</div>
。
答案 2 :(得分:1)
不太确定你在问什么,但也许你需要这个:
#include<stdio.h>
#include<stdlib.h>
typedef struct student
{
char id[11];
} Student;
int main(int argc, char **argv){
int nbstudents = 0;
int i;
printf ("How many students do you want: ");
scanf("%d",&nbstudents);
Student *studentarray = malloc(nbstudents * sizeof(Student));
for(i = 0; i < nbstudents; i++)
{
printf ("Enter student id %d: ", i);
scanf("%s", studentarray[i].id);
}
printf ("Students ids entered:\n");
for(i = 0; i < nbstudents; i++)
{
printf ("Student id %d: %s\n", i, studentarray[i].id);
}
free(studentarray);
return 0;
}
Th student
结构应该包含除id
之外的其他字段,例如学生的姓名。