2014-11-18 2 views
0

주어진 파일에서 한 줄씩 읽습니다. arrayOfAllLines 줄만 저장합니다. 두 줄이있는 경우 의미가 있습니다. 파일의 동일한 줄을 하나만 저장하려고합니다.배열은 확장되지 않고 변경 요소가 하나만 유지됩니다

배열을 정의했습니다 : arrayOfAllLines 고유 한 행만 포함하도록되어 있습니다. 나는 newLine이라는 포인터를 사용하여 행을 읽고 각 반복의 값을 내 배열의 동일한 지점까지 이미 저장된 행과 비교합니다.

문제는 선을 추가하는 대신 이전 반복에서 저장 한 선을 무시하는 것입니다. 의미, 당신이 내 코드를 실행하는 경우 줄을보십시오 : printf("%s\n", arrayOfAllLines[0]) - 그 값은 모든 반복을 변경하고 그것을 영구적으로 설정하고 싶습니다. 당신은 모든 동안() 반복에서 areLinesIdentical을 재설정해야

int main(int argc, char *argv[]) 
{ 
    FILE *file = fopen(argv[1], "r"); 
    const char *arrayOfAllLines[1000]; 
    char newLine[128]; 
    int areLinesIdentical = 0; 
    int indexOfCurrentLine = 0; 
    int i = 0; 
    while (fgets(newLine, sizeof newLine, file) != NULL) { 
     for (i = 0; i < indexOfCurrentLine; i++) { 
      if (strcmp(newLine, arrayOfAllLines[i]) == 0) { 
       areLinesIdentical = 1; 
       break; 
      } 
     } 
     if (areLinesIdentical == 0) { 
      arrayOfAllLines[indexOfCurrentLine] = newLine; 
      indexOfCurrentLine++; 
     } 
     areLinesIdentical = 0; 
     printf("%s\n", arrayOfAllLines[0]); 
    } 
    return 0; 
} 

답변

0

:

여기 내 코드입니다.

문제점 2 모든 입력 항목에 단일 입력 버퍼에 같은 포인터를 할당하고 있습니다. 배열에 할당 할 때 _strdup() 사용을 고려하십시오.

+0

넵. 업데이트를 볼 수 있습니다. – user3045065

+0

문제가 발견되었습니다. arr [i] = strdup (line) 사용 – Anonymous

0

항상 새 줄을 동일한 버퍼 newline에 읽고 해당 버퍼에 대한 포인터를 저장합니다. fgets()을 사용할 때마다 버퍼를 덮어 씁니다. Anonymous으로 루프가 새로 시작될 때마다 LinesIdentical을 재설정하면 고유 한 행 수와 같은 수의 배열로 끝나지 만 입력의 마지막 줄을 포함하는 동일한 버퍼에 대한 포인터로 채워집니다 파일.

당신이 새로운 독특한 라인을 발견하고 더 이상 배열을하지 않아도 일단 메모리 ( free)를 해제하는 것을 잊지하지 않은 새로운 버퍼 각 시간 ( malloc)를 할당 할 필요에서 당신이 목표로하는 무엇을 달성하기 위해.

관련 문제