我正在尝试创建一个结构数组,并且我正在从.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函数将这些值分配给我的struct数组如下:
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文件。
答案 0 :(得分:0)
您已发布了一小部分代码,但我认为您的问题来源是:
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);
}
我为这个错误提供了一个小手,但是记得学会利用调试器找到这些小错误。