使用指针元素检索链表中的数据

时间:2016-05-16 19:41:44

标签: c struct linked-list

#include<stdio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct trial{
   char *data;
   int save;
   struct trial *next;
};

struct trial *head = NULL;

int main (){
    int x, ctr, y;
    char filestr[500];
    char *data, *save, *filestr2;
    FILE *fp;
    fp = fopen("Untitled1.txt", "r");   
    printf("Count: ");
    scanf("%d", &x);
    while(x > 0){
        if(fgets(filestr, sizeof(filestr), fp) != NULL){
            data = strtok(filestr, " ");
            filestr2 = strtok(NULL, "");
            save = strtok(filestr2, "");
            printf("%s, %s", data, save);
            struct trial *link = (struct trial*) malloc(sizeof(struct trial));
            link->data = data;
            link->save = atoi(save);
            link->next = head;
            head = link;
        }
        x--;
    }
    printf("\n");
    struct trial *ptr = head;
    ctr = 0;
    while(ptr != NULL){
          printf("Data %d: %s, %d\n", ctr + 1, ptr->data, ptr->save);
          ptr = ptr->next;
          ctr++;
    }
return 0;
}
/*Untitled1.txt is as follows
dragon 12
shadow 19
spirit 6
wiser 4
civil 8
fairy 7
*/

现在这里出现问题,当x = 3时;它应该是:
数:3
龙,12
影子,19
精神,6

数据1:精神,6
数据2:影子,19
数据3:龙,12

但这是发生的事情。
数据1:精神,6
数据2:精神,19
数据3:精神,12

为什么保存变量正在移动且*数据不是?我应该添加什么以及放置在哪里?谢谢您的帮助。 [抱歉不必要的变量,它是整体的一部分]

2 个答案:

答案 0 :(得分:2)

如上所述,strtok返回指向其第一个参数的指针。要修复此错误,请复制您所关注的部分。只需替换

即可
link->data = data;

link->data = strdup(data);

请记得免费链接 - >数据。

答案 1 :(得分:0)

strtok不为它返回的字符串分配内存。它只是返回指向你给它的缓冲区的指针。因此,您需要复制要保存的任何数据。

最简单的解决方法是改变:

link->data = data;

要:

link->data = strdup(data);

NULL添加strtok返回值的检查也是一个好主意。