动态分配和结构-将内存动态分配给来自结构的字符串

问题描述 投票:0回答:1

我在动态分配和结构方面遇到了问题。任务:我有一个学生结构,看起来像这样:

typedef struct{
  unsigned id;
  char *lastName;
  float grade;
}students_t;

我不允许向lastName传递最大字符数,它必须保持一个指针,我每次都会增加其大小。

我的代码如下:

unsigned counter = 0;
    students_t* students = NULL;
    students_t temp;

    //
    char char_current;
    unsigned char_counter=0;
    //

    while(fscanf(inputFile,"%u",&temp.id) == 1){

       students = realloc(students,(counter+1) * sizeof(students_t));
       students[counter].id=temp.id;
       printf("%d",students[counter].id);

      students[counter].lastName = NULL;
      while(fscanf(inputFile,"%c",&char_current) != ' '){
        students[counter].lastName = realloc(students[counter].lastName,(char_counter+1) * sizeof(char));
        students[counter].lastName[char_counter] = char_current;

        char_counter++;
      }

      students[counter].lastName[char_counter] = '\0';

      fscanf(inputFile,"%f",&students[counter].grade);


       counter++;
    }

我的问题是从一开始就使用了de fscanf(因为程序进入了无限循环),但是我不知道如何实际修复它。

如果有人可以帮助我解决问题,我将非常感激。谢谢!

c struct dynamic-memory-allocation
1个回答
0
投票

您有几个问题:

  1. while()循环不会终止(您的第一个问题)。>>
  2. fscanf()是不安全的-有更好的选择。
  3. 您使用的fscanf()错误。
  4. 一次读取一个字符的字符串效率低下。
  5. 反复调用“ realloc()”效率低下-有更好的选择。
  6. [请稍等一下,我将提供一种替代方法(在我有机会对其进行测试之前,我不想发布任何代码)。

© www.soinside.com 2019 - 2024. All rights reserved.