2017-03-24 4 views
-1

안녕하세요 저는 텍스트 파일의 모든 단어를 읽고 각각을 배열 (WordA [])에 저장하는 함수를 만들고 있습니다.텍스트 파일을 초기화하고 배열에 저장하십시오.

#include <stdio.h> 
#include <string.h> 
#include "dictionary.h" 
void 
InitializeWords(char *WordA[]) 
{ 
    char word[31]; 
    int i; 
    FILE *filep; 

    filep = fopen("bacon.txt", "r"); 

    if (fp != NULL) { // means that file exists 
     for (i=0; i<NWORDS; i++){ 
      fscanf(filep, "%s", word); 
      strcpy(WordA[i], word); 
     } 
     fclose(filep); 
    } 

} 

WordA[] 여기에 초기화됩니다 단어가 내 프로그램의 후반부에 사용됩니다 여기에 내 코드입니다. 나는 내 오류가 어디서 추적되었는지 분명히 내가 strcpy (WordA[i], word)을 제거하면 단어가 제대로 인쇄되거나 읽혀지는 것 같습니다.

InitializeWords는 메인 함수에서 호출됩니다 내가 그나마

int 
main() 
{ 
    char *WordA[NWORDS]; // a 1D array of character pointers (addresses) 

    InitializeWords(WordA); 
    StartGame(WordA); // starts the program game 

    return 0; 

} 

배열에서 단어를 복사에서 잘못 이해. 도와주세요! 고마워요!

+0

또한 만들려고하시기 바랍니다 [, 최소를 완료하고 검증 가능한 예] (http://stackoverflow.com/help :

프로그램의 끝에서 당신은 다음과 같이 할당 된 메모리를 해제해야/mcve) 우리를 보여주십시오. 이 'InitializeWords' 함수를 호출하는 방법과 전달할 항목을 포함합니다. –

+0

'WordA'의 정의는 무엇입니까? –

+0

"Somme programmer dude"의 코멘트를 읽고 그가 묻는 것을하십시오. 그렇지 않으면 우리가 도울 수 없습니다. –

답변

0

주의 사항 :이 코드는 최소한의 오류 검사 코드가 아니며 아직 개선의 여지가 있습니다.

for (i = 0; i<NWORDS; i++) { 
    fscanf(filep, "%30s", word); 
    WordA[i] = malloc(strlen(word) + 1); // <<<< added this line 
    strcpy(WordA[i], word); 
} 

WordA은 초기화되지 않은 포인터의 배열입니다. 따라서 각각의 단어에 대해 malloc(strlen(word) + 1);을 사용하여 메모리를 할당해야합니다. NUL 문자열 터미네이터 때문에 +1.

void FreeWords(char *WordA[]) 
{ 
    int i; 
    for (i = 0; i<NWORDS; i++) { 
    free(WordA[i]); 
    } 
} 
... 
FreeWord(WordA); 
+1

할당 된 메모리를 확보하기 위해 코드를 추가해야합니다;) – kaldoran

+0

예. 나는 메모리 공간을 할당하지 않았고 그들을 풀어 줬다. 감사! – Erail

관련 문제