#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
为什么保存变量正在移动而*数据没有移动?我应该加些什么,放在哪里?谢谢你的帮助。抱歉,不必要的变量,它是一个整体的一部分。
发布于 2016-05-16 20:01:16
如前所述,strtok返回指向其第一个参数的指针。为了修复这个错误,复制您被插入的部分。简单地替换
link->data = data;使用
link->data = strdup(data);记得释放链接->数据。
发布于 2016-05-16 20:00:50
strtok不为它返回的字符串分配内存。它只会将指针返回到您给它的缓冲区。因此,您需要复制您希望保存的任何数据。
最简单的解决办法是改变:
link->data = data;至:
link->data = strdup(data);添加对来自NULL的strtok返回值的检查也是一个好主意。
https://stackoverflow.com/questions/37261975
复制相似问题