2012-10-31 2 views
3

C에서 fgets로 일반 텍스트 파일을 읽으려고하면 첫 번째 줄에 이상한 출력이 표시됩니다. 그래서 첫 번째 라인이 "안녕하세요"로되어 있다면 "ELFh` 20120918 (prerelease) @xxhello"와 같은 것으로 나오게됩니다. 여기에 코드입니다 :fgets를 사용하여 텍스트 파일을 읽을 때 이상한 기호

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main(int argc, char **argv) 
{ 
    FILE *fr; 
    int i; 
    extern int uniq(char *previous_word, char *current_word); 
    char *line1 = malloc(500); 
    char *line2 = malloc(500); 
    char *temp; 
    for(i = 0; i<argc; i++) 
    { 

     fr = fopen (argv[i], "r"); 
     while(fgets(line2, 499, fr) != NULL) 
     { 
      uniq(line1, line2); 
      temp = line1; 
      line1 = line2; 
      line2 = temp; 
     } 
     fclose(fr); 
    } 
    return 0; 
} 
int uniq(char *previous_word, char *current_word) { 
    if(!(current_word)) 
     return 1; 
    if(strcmp(previous_word, current_word)) 
     printf("%s", current_word); 
    return 0; 
} 

내가이 구글에 대한 문제와 스택 오버 플로우의 줄 수있는 모든 설명을 검색 한 나는 그것을 수정하는 모든에서 아무것도 찾을 수 있습니다.

+3

ELF는 Linux 실행 파일을 읽고있는 것처럼 보입니다. – rekire

+1

'argv [0]'은 여러분이 생각한대로 응용 프로그램에 전달 된 첫 번째 인수가 아니라 실행 가능한 응용 프로그램 이름입니다. 이 스레드를 확인하십시오 : http://stackoverflow.com/questions/2020945/argc-and-argv-in-main – Jack

답변

4

루프는 인덱스 1에서 시작해야합니다. argv[0]은 실행 파일입니다.

argv[0]을 확인하려면 소위 다중 이진 실행 파일이있는 경우 유용합니다. 거기에서 하나의 바이너리만으로도 다른 명령을 처리 할 수 ​​있습니다. 이는 메모리를 절약해야하는 임베디드 시스템에서 매우 유용합니다.

+0

천재 야. – Khodeir

+0

일부 맞춤법 오류가 수정되었지만 "멀티 바이너리 [실행 가능] (http://dictionary.reference.com/browse/execrable)"만 남기를 원했습니다. 8-)} –

+0

지하철에서 도움을 받으면 이런 일이 일어납니다. – rekire

관련 문제