#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 점을 선으로 모든 정보를 파일 라인을 읽고 배열에 모든 구조체를 저장합니다. 이 배열은 포인터의 배열입니다. 요소가 사용되지 않으면 포인터는 null을 가리 킵니다. 3. 시험 방법. 이 배열의 구조체에 데이터를 인쇄하고 싶습니다.포인터를 배열에 저장할 때 어디에서 오류가 발생합니까?
시험 방법이 이상한 결과를 인쇄했습니다. 아무도 내게 문제가 무엇인지 도울 수 있습니까? 말하지 말아라. 고맙습니다.
input.txt를 :
zombieland 2009 88
avatar 2009 178
watchmen 2009 215
이상한 결과는 아마도 메모리 주소 일 것입니다. 왜'record * list [1024]'를 쓰는가? – Brian
이것은 정말로 문제는 아니지만'if (list [i] == NULL) break;를 실행하고 다음 줄의 printf 문을 수행하면 프로그램 속도가 빨라집니다. – ciphermagi
포인터의 배열? –