链接列表读数错误&错误信息

时间:2017-06-27 20:09:50

标签: c linked-list

我想读取文本文件,将该文本文件中的信息放入链接列表,关闭文件,然后使用链接列表将所有内容打印到我的程序中。 出于某种原因,在我的第一行之后我得到了“-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;

}

1 个答案:

答案 0 :(得分:0)

您的代码中存在多个问题。

一个问题是你混合了fgets和fscanf。 fgets读取给定长度,无论读取什么(假设没有收到EOF)。因此,在第一个循环中,当您调用fgets(a.robot, sizeof a.robot, tsin)时,它会读取15个字节并保存{{1}进入TERMINATOR T-80,当您再次调用fgets时,它会再读取10个字节并将a.robot保存到0 1\r\nTERMI。现在,以下a.type失败,因为下一个字符为fscanf,不符合N

另一个问题是你正在指定像指针一样的数组,这就是产生错误的原因。 (错误的编译器没有为您找到此问题)。 %d的类型为a.robot,当您指定char [15]时,您正试图将*temp->robot = a.robot分配给char [15] char*temp-robot基本相同。这同样适用于下一行。您应该使用temp->robot[0](或更安全,strcpy)。

关闭读取文件描述符后,什么是strncpy ???如何在条件struct node循环时打印a.xxx?通过分配 p != NULL 每个循环???