2013-05-27 5 views
1

이 프로그램은 커맨드 라인 인자를 취하고 인자 카운트와 함께 표시하는 C로 작성했습니다. 그러나 논쟁은 타이프 된 논증의 수보다 하나 더 많습니다.커맨드 라인 인자 C의 카운트

#include<stdio.h> 
void main(int argc, char *argv[]) 
{ 
int i=0; 
for(i=0;argv[1][i]!='\0';i++) 
{ 
    if(argv[1][i]>='a' && argv[1][i]>='z') 
    { 
    argv[1][i]=argv[1][i]; 
    } 
    } 
    printf("%s",argv[1]); 
    printf("\n"); 
    printf("%d",argc); 
} 

나는 인수 : 위의 abracadabra. 그것은 나에게 세 수를 제공합니다. 어떤 이유. 미리 감사드립니다.

+0

나는 당신에 대해 모르지만, 나의 첫 번째 생각은 args의 가치가 무엇인지 * 알았을 것이다. 이 경우, 내가 사용하는 모든 플랫폼에서 바로 처리 할 수 ​​있습니다. – cHao

+0

btw 여기에서 루프가해야 할 일은 무엇입니까? – gkovacs90

+0

여기에는 아무런 관련이 없습니다. 인수의 끝으로 표시하도록 추가했습니다. – Koneri

답변

1

printf("%s",argv[0])은 무엇을 할 수 있을까요? argv [0]은 실행되고있는 프로그램 이름을 가지고 있으며 첫 번째 인수입니다 (예 : a.out).

+0

참고 : "실행중인 파일"이 아니라 "프로그램 이름". 이 두 플랫폼은 일부 플랫폼 또는 경우에 따라 다를 수 있습니다. – cHao

4

C 배열은 0부터 시작하므로 유효한 인덱스는 [0..argc]입니다. 프로그램에서 argv[0]을 건너 뜁니다.

지정한 인수 외에 argv[0]이 프로그램 이름으로 설정되고 플랫폼이 이름을 결정할 수없는 경우 NULL이 설정됩니다. 명령 행 인자들을 확인하고 싶었다면

, 당신은 argv 명령 줄 인수를 보유하지 않기 때문이다

int i; 
for (i=0; i<argc; i++) { 
    printf("argv[%d] = %s\n", i, argv[i]); 
} 
+0

오, 그래. – Koneri

+0

프로그램 이름 감사합니다. 파일 이름이 될까요? – Koneri

+1

@imonc : 실행 파일의 파일 이름이 * 정의되지 않았습니다. 실제 값은 구현에 따라 다릅니다. – cHao

0

뭔가를 할 수 있습니다. 전체 명령 행을 보유합니다. 첫 번째는 명령이고 나머지는 인수입니다.

1

실제로 argv [0] 보유 프로그램의 이름은 프로그램이 아이를 포크 할 때 사용합니다. C에서 fork()를 호출 할 때마다 상위 프로세스와 같은 이름의 하위 프로세스 (예 : a.out)가 생성됩니다. 자식은 argv [0]에서 부모의 이름을 취합니다. 그래서 모든 것이 목적을 가지고 있습니다.