【问题标题】:retrieve data in linked list with pointer element使用指针元素检索链表中的数据
【发布时间】:2016-05-16 19:41:44
【问题描述】:
#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

为什么 save 变量在移动而 *data 没有?我应该添加什么以及放置在哪里?谢谢您的帮助。 [对不起,不必要的变量,它是整体的一部分]

【问题讨论】:

标签: c struct linked-list


【解决方案1】:

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

link->data = data;

link->data = strdup(data);

记得释放链接->数据。

【讨论】:

    【解决方案2】:

    strtok 不会为它返回的字符串分配内存。它只是将指针返回到您给它的缓冲区中。所以你需要复制任何你想保存的数据。

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

    link->data = data;
    

    收件人:

    link->data = strdup(data);
    

    添加对来自strtokNULL 返回值的检查也是一个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多