2014-01-26 3 views
0

이것은 코드 단편입니다. 사전 형식은 다음과 같습니다. {word word \ n word word \ n ...}2D 문자 배열 동적 재배치 실패

두 번째로 roWords 단어를 재 할당하는 프로그램이 실패한 것 같습니다. 그 이유는 무엇입니까?

다음과 같이 선언하십시오. char ** roWords = NULL, ** enWords == NULL;

while (fgets(buffer, 100, dictionary)) 
    { 
     counter++; 

     roWords = (char**)realloc(roWords, sizeof(char*)* counter); 
     enWords = (char**)realloc(enWords, sizeof(char*)* counter); 

     p = strtok(buffer, " \n"); 


     roWords[counter - 1] = NULL; 
     roWords[counter - 1] = (char*)realloc(roWords, sizeof(char)* strlen(p)); 
     strcpy(roWords[counter - 1], p); 


     p = strtok(NULL, " \n"); 


     enWords[counter - 1] = NULL; 
     enWords[counter - 1] = (char*)realloc(enWords, sizeof(char)* strlen(p)); 
     strcpy(enWords[counter - 1], p); 


    } 
+0

은 어떻게 가을합니까? 오류 메시지가 있습니까? – JVMATL

+0

' '\ 0'종료를 위해 여분의 char 하나를 할당해야합니다. 또한, 설정 후 'realloc'은 약간 복잡해 보입니다. 단어에 메모리를 할당하는 데 'malloc'을 사용하는 것이 더 명확 할 것입니다. –

+0

이 프로그램은 첫 번째 루프에서 잘 작동하지만 dictionray 파일에서 두 번째 줄을 읽으면 함수를 다시 입력합니다. 카운터가 증가하고 카운터도 증가하지만 신이기도하지만 다시 입력 할 때 "roWords = (char * *) realloc (roWords, sizeof (char *) * counter); " 어설 션 오류가 발생했습니다. 어떤 설교? –

답변

0

솔루션은 다음과 같습니다

while (fgets(buffer, 100, dictionary)) 
{ 
    counter++; 

    if (counter == 1) 
    { 
     roWords = (char**)malloc(sizeof(char*)); 
     enWords = (char**)malloc(sizeof(char*)); 
    } 
    else 
    { 
     roWords = (char**)realloc(roWords, sizeof(char*)* counter); 
     enWords = (char**)realloc(enWords, sizeof(char*)* counter); 
    } 

    p = strtok(buffer, " \n"); 


    roWords[counter - 1] = (char*)malloc(sizeof(char) * (strlen(p) + 1)); 
    strcpy(roWords[counter - 1], p); 
    roWords[counter - 1][strlen(p)] = '\0'; 

    p = strtok(NULL, " \n"); 


    enWords[counter - 1] = (char*)malloc(sizeof(char)* (strlen(p) + 1)); 
    strcpy(enWords[counter - 1], p); 
    enWords[counter - 1][strlen(p)] = '\0'; 

} 
+0

'strtok (버퍼, "\ n");'항상 \ '를 제거하지 않습니다. 'buffer' ->''\ n "'시도해보십시오. ''\ n ''이 남아 있습니다. – chux