我无法访问数组内部结构

时间:2016-03-31 13:42:04

标签: c struct printf

我修好了!

  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;
 }          

我已经修改了评论和善意的答案。 它确实有效

感谢您的帮助

我真的很感激!这真的很有用。

3 个答案:

答案 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之外的其他字段,例如学生的姓名。