2012-11-19 4 views
1

파일을 읽지 만 구조체에 저장하지 않는 프로그램이 있습니다. 일단 데이터가 읽혀지면, 프로그램이 나중에 상기 데이터를 사용할 수 있도록 구조 내에 저장되어야한다. 이 일을 처리하는 방법을 알아내는 시간을 가지고 있습니다. 필요에 따라 판독 파일포인터로 가득 찬 구조체에 데이터 저장

void ReadFile(fr *friends, int *counter, char buffer[], FILE *read) { 
    fseek(read, 0, SEEK_SET);  
    while (fscanf(read, "%s", buffer) != EOF) { 
    friends[*counter].First_Name = malloc(BUFFSIZE * strlen(buffer)); 
    strcpy(friends[*counter].First_Name, buffer); 

    } 

} 

추가 정보

구조

typedef struct friends_contact { 
    char *First_Name; 
    char *Last_Name; 
    char *home_phone; 
    char *cell_phone; 
} fr; 

제공 할 수있다. 정보가 구조 내에 저장되지 않아서 나중에 호출 할 수있는 이유를 알아 내고 싶습니다.

+0

왜 '카운터'를 포인터로 만들었습니까? 또한'ReadFile'의 본문에서'contacts'를 사용합니까? – dst2

+0

저장 코드가이 질문에 대답하는 데 상당히 도움이 될 것입니다. – WhozCraig

+0

@dtidmarsh 유감스럽게도 그 유형이'contacts'는'friends' 여야합니다. –

답변

0

문자 배열을위한 공간을 할당 한 다음 복사하는 코드는 의미가 있지만 while()주기에서 두 가지 중 하나가 발생할 수 있습니다. 즉, 상태는 즉각 false으로 계산되므로 아무 것도 복사되지 않거나 반복됩니다. 그리고 fscanf가 빈 문자열을 buffer에 쓸 때까지 의 내용을 while()으로 증가 시키면 friends[*counter].First_Name의 내용을 덮어 씁니다.

+0

본문에 * 카운터를 추가하려고 시도했지만 프로그램이 충돌합니다. –

+0

더 나은 결과를 얻으려면 전체 긴 코드를 게시 할 수 있습니다. 문제. –

+0

어떻게 추가 했습니까 (* 카운터)? – nairdaen

4

"친구"란 무엇입니까? 전역 변수?
"연락처"란 무엇입니까? 그것은 기능에 사용되지 않습니다.
그들을 섞어도 될까요?

BUFFSIZE * strlen(buffer) -> 의미는 무엇입니까? strlen(buffer)BUFFSIZE 번 할당합니다. 아마도 sizeof(char) * strlen(buffer)일까요?

fscanf 수술 후 "버퍼"의 길이를 확인해야한다고 생각합니다.

+0

'친구'의 '연락처'문제는 오타였습니다. 나는 메인 포스트를 편집했다. –

관련 문제