#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct record
{
char*title;
char* year;
char* length; //in minutes
} record;
void read(record* list[]);
void test(record* list[]);
int main(int args, char* argv[])
{
record* list[1024];
read(list); //add record to list (pass by reference)
test(list);
write(list);
return 0;
}
void test(record* list[])
{
int i;
for(i=0; i<1024; ++i)
{
if(list[i]!=NULL)
{
printf("%s index %d \n", list[i]->title ,i);
}
}
}
void read(record* list[])
{
int j; //ini a array of pointer initially point to null
for(j=0;j<1024;++j)
list[j]=NULL;
FILE* input=fopen("input.txt","r"); //file in
if(!input)
{
printf("Error"); exit(1);
}else
{
int i=0; //index for adding elements to array
char temp[100];
while(!feof(input))
{
record* current_record=(record*)malloc(sizeof(record));
fgets(temp,sizeof(temp),input); //temp is a line of file
char deli[]=" ";
char* result=NULL;
result=strtok(temp,deli); //titile info
current_record->title=result;
result=strtok(NULL,deli); //year
current_record->year=result;
result=strtok(NULL,deli); //length
current_record->length=result;
list[i]=current_record; //add to array
printf("%s \n",current_record->title);
++i;
}
fclose(input);
}
}
这是我的程序所做的: 1.逐行读取文件 2. 将一行中的所有信息存储到一个结构中,并将所有结构存储到一个数组中。这个数组是一个指针数组。当元素未被使用时,指针指向空。 3.测试方法。我想在此数组的结构中打印数据。
测试方法打印了一个奇怪的输出。谁能帮我解决问题?不要告诉我如何修复。谢谢。
输入.txt:
zombieland 2009 88
avatar 2009 178
watchmen 2009 215
最佳答案
你的错误是你没有保留从文件中读取的数据副本。
当您读取数据时,您将该数据放入局部变量 temp
。然后你将各种指针设置到 temp
中的不同位置(你应该复制到不同的内存)。当你阅读另一行时,你覆盖了 temp
的内容,但指针仍然指向同一个地方
step 1 read zombieland 2009 88
pointers ^ ^ ^
step 2 read avatar 2009 178
oldpointers ^ ^ ^
newpointers ^ ^ ^
简而言之:将 strtok()
的结果复制到全新的 malloc
内存中。
哦!不要忘记在不再需要内存时(可能在程序结束时)free()
。
关于c - 将指针存储到数组时哪里出错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22489157/