2009-08-03 8 views
0

에서 읽기 argv[0]에서 읽는 방법은 무엇입니까? NetBeans를 사용하고 있습니다. 매번 나는 표준 입력해야합니다. argv을 사용하면 입력없이 프로그램이 실행됩니다.argv [0]

여기 내 코드입니다 :

int main(int argc,char *argv[]) 
{ 
    char *text; 
    int textLen,repNum; 

    text = stream2string(stdin,&textLen); 
    //....text = argv[0] doesnt work :(

UPDATE :

내가 컴파일하고 실행하면, 내가 예 문자열을 입력해야합니다! 문자열은 항상 동일합니다 : ABAABAABBBA. 그래서 나는 stdin 대신에 첫 번째 인수를 취할 것입니다. 그러나 argv[1]도 작동하지 않습니다.

여기 stream2string()이다 : 나는 textLen도 중요 설정 생각

char *stream2string (FILE *fptr, int *n) 
{ 
    static char *s; 

    *n = 0; 
    ALLOC(s,char,2); 
    s[*n] = getc(fptr); 

    while(s[*n]!=EOF && s[*n]!='\0' && s[*n]!='\n') { 
    REALLOC(s,char,++*n+2); 
    s[*n] = getc(fptr); 
    } 
    s[*n] = '\0'; 
    return(s); 
} /* stream2string() */ 

.

+1

질문이 무엇인지, 또는 무엇을 성취하려고하는지 명확하지 않은 경우, 문제를 설명하는 전체 예제 프로그램으로 명확하게 설명 할 수 있습니까? –

+1

인수가있을 때 argc의 값은 무엇입니까? argv [0]은 실행 파일의 이름을 저장해야합니다. 첫 번째 인수는 argv [1]에 있어야합니다. – Zed

답변

7

argv [0]은 실행 파일의 이름입니다. 나는 당신이 그걸 읽고 싶어한다고 생각하지 않는다!

int main(int argc,char *argv[]) 
{ 
    char *text; 
    int textLen,repNum; 
    FILE *theinput; 

    if (argc < 2) { 
    /* no argument */ 
    /* give error message and exit */ 
    fprintf(stderr, "Must pass an argument!\n"); 
    exit(1); 
    } 

    theinput = fopen(argv[1], "r"); 

    if (!theinput) { 
    /* Argument is non-existing file */ 
    /* give error message and exit */ 
    fprintf(stderr, "Can't read %s\n", argv[1]); 
    exit(1); 
    } 

    text = stream2string(theinput, &textLen); 

    fclose(theinput); 

등 (물론 당신이하고 제공해야 할 수 있습니다 오히려, 나는 당신이 ARGV [1] (명령 줄에 프로그램의 첫 번째 인수로 주어진 파일 이름)를 열고 것을 읽고 싶은 생각 더 자세하고 유용한 오류 메시지 등,하지만 당신이 누락 된 것으로 보인 핵심 사항에 집중하려고 노력하고 있습니다.)

편집 : : 의견을 보면 패션에 집중하지 못하는 것 같습니다. 따라서 최소한 허용 가능한 오류 메시지를 제공하기 위해 을 편집했습니다.

+1

입력에서 읽기 전에 fopen의 반환 값을 확인하는 것을 잊지 마십시오! –

+0

좋아, 몇 가지 오류 검사를 추가, 그것을 간단하게 유지하려고했다 (아무도 다른 코드를 제공하지 않는 것을 볼 수있다. 다시 한번 이것은 실제로 도움이 될 수있는 방법을 증명한다. –

+0

argc를 먼저 사용하여 1 개의 인수가 있는지 확인하십시오. – hiena

2

첫 번째 인수를 읽는 대신 argv [1]을 사용하십시오. argv [0]은 호출 된 실행 파일의 이름 (또는 Unix/Linux 시스템에서 실행 파일에 대한 링크 이름)을 반환합니다.

0

이것은 IDE에서 프로그램 인수를 설정하지 않은 것처럼 들립니다. 이것은 NetBeans 문제입니다. C와 아무런 관련이 없습니다.