【发布时间】:2017-06-27 20:09:49
【问题描述】:
我想读取一个文本文件,将该文本文件中的信息放入一个链表,关闭文件,然后使用链表将所有内容打印到我的程序中。 出于某种原因,我在其余列表的第一行之后得到“-858993460”,直到我达到我的第 15 行然后我得到一个错误:
在 ConsoleApplication14.exe 中的 0x5313B5F2 (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突写入位置 0xCCCCCCCC。
我正在阅读的列表:
TERMINATOR T-800 1
TERMINATOR T-1000 2
TERMINATOR T-800 3
TERMINATOR T-800 4
TERMINATOR T-1000 5
TERMINATOR T-800 6
TERMINATOR T-800 7
TERMINATOR T-800 8
TERMINATOR T-1000 9
TERMINATOR T-800 10
TORMONUTTUR T-800 101
TERMINATOR T-800 11
FEL FEL FEL
TERMINATOR T-1000 12
TERMINATOR T-800 13
TERMINATOR T-800 14
TERMINATOR T-800 15
TERMINATOR T-1000 16
TERMINATOR T-800 17
TERMINATOR T-800 18
TERMINATOR T-1000 19
TERMINATOR T-800 20
谁能解释一下。
#include <stdio.h>
#include <stdlib.h>
struct Link {
char robot[15];
char terminatortyp[10];
int idnr;
struct Link *next;
};
struct Link *first = NULL;
int main(void) {
int antal = 0;
struct Link a;
FILE *tsin = fopen("textfil1R.txt", "r");
if (tsin == NULL) {
printf("Kunde inte läsa filen 'textfil.txt'.\n");
exit(EXIT_FAILURE);
}
struct Link *temp;
while (fgets(a.robot, sizeof a.robot, tsin) != NULL && fgets(a.terminatortyp, sizeof a.terminatortyp, tsin) != NULL && fscanf(tsin, "%d", &a.idnr) != EOF)
{
temp = malloc(sizeof(struct Link));
*temp->robot = a.robot;
*temp->terminatortyp = a.terminatortyp;
temp->idnr = a.idnr;
temp->next = first;
first = temp;
++antal;
}
fclose(tsin);
struct node *p;
p = first;
while (p != NULL)
{
printf("%s", a.robot);
printf("%s", a.terminatortyp);
printf("%d", a.idnr);
temp = temp->next;
}
printf("%d", antal);
getch();
return 0;
}
【问题讨论】:
-
不要将
fgets与fscanf混用。将复杂的while分解成更小的部分。从每个输入行的单个fgets开始并进一步检查它 - 您不能明智地将两个fgets调用应用于同一输入行。您正在尝试限制读取的输入长度,但第二个字段的长度不同。
标签: c linked-list