c - 如何将字符串扫描到结构数组?

标签 c struct scanf

我正在尝试创建一个结构数组,并且正在从 .txt 文件中读取结构元素。当我尝试从文件中扫描字符串时,我的程序停止,并且在调试代码块时显示“程序收到信号 SIGSEGV,段错误。”。我正在尝试从文件中读取字符串并将它们分配给我的结构。我该怎么办?

我的 .txt 文件如下:

H 1 1 MILK White liquid produced by the mammals
H 2 1 IN Used to indicate inclusion within space, a place, or limits
H 3 3 BUS A road vehicle designed to carry many passengers
H 5 3 DAN The name of a famous author whose surname is Brown
V 1 1 MIND A set of cognitive faculties, e.g. consciousness, perception, etc.
V 3 3 BAD Opposite of good
V 2 5 ISBN International Standard Book Number

我的 loadTextFile 函数将这些值分配给我的结构数组如下:

Word_t* loadTextFile(FILE* myfile, int nrWords)
{
  Word_t* temp;
  temp=malloc(sizeof(Word_t)*nrWords);
  temp->word=malloc(MAX_WORD_LENGTH);
  temp->clues=malloc(MAX_CLUES_LENGTH);

  for(int count=0;count<nrWords;count++)
  {
    fscanf(myfile," %c %d %d %s %[^\n]%*c", &temp[count].direction,&temp[count].x, &temp[count].y, temp[count].word, temp[count].clues);
  }
  printf("ELEMENTS");
  for(int i=0;i<nrWords;i++)
  {
    printf("%c %d %d %s %s\n", temp[i].direction, temp[i].x, temp[i].y,temp[i].word, temp[i].clues);
  }

  return temp;
  }

我想让我的输出看起来像 txt 文件。

最佳答案

您已经发布了一小部分代码,但我认为您的问题根源在这里:

temp->word=malloc(MAX_WORD_LENGTH);
temp->clues=malloc(MAX_CLUES_LENGTH);

您实际上只为第一个元素(或者换句话说 temp[0])分配内存,但您需要为所有数组成员执行此操作。因此,您的代码应该是这样的:

for(int count=0;count<nrWords;count++)
  {
    temp[count]->word=malloc(MAX_WORD_LENGTH);
    temp[count]->clues=malloc(MAX_CLUES_LENGTH);
    fscanf(myfile," %c %d %d %s %[^\n]%*c", &temp[count].direction,&temp[count].x, &temp[count].y, temp[count].word, temp[count].clues);
  }

我对这个错误表示支持,但是请记住学习利用调试器来查找这些小错误。

关于c - 如何将字符串扫描到结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49778457/

相关文章:

c - Scanf 似乎工作不正常,或者我做错了什么

c - sscanf 从头开始​​读取

同时 Curl 多个获取 URL

c - C 中 typedef 枚举中的十六进制

c - 文件指针位置

c# - C# 中的 C 联合错误未正确对齐或被非对象字段重叠

c - 扫描与数组类型相同的 N 个成员的结构是否安全?

c - 在 C 中与 mmap 共享 vector

c - 我如何知道 scanf 输入的是字符还是 float ?

c - 结构中指针变量的大小