Programing

int argc, char * argv []은 무슨 뜻인가요?

lottogame 2020. 2. 15. 19:34
반응형

int argc, char * argv []은 무슨 뜻인가요?


많은 C ++ IDE와 컴파일러에서 주요 함수를 생성 할 때 다음과 같이 보입니다.

int main(int argc, char *argv[])

명령 줄 컴파일러를 사용하여 IDE없이 C ++을 코딩 할 때 다음과 같이 입력합니다.

int main()

매개 변수없이 이것이 무엇을 의미하며 내 프로그램에 중요합니까?


argvargc명령 줄 인수를 전달하는 방법입니다 main()C와 C ++에서.

argc가 가리키는 문자열의 수입니다 argv. 실제로는 모든 구현이 프로그램 이름을 배열 앞에 추가하므로 실제로는 1에 인수의 수를 더한 값이됩니다.

변수 이름은 argc( argument count ) 및 argv( argument vector )로 명명 되지만 유효한 식별자를 부여 할 수 있습니다 int main(int num_args, char** arg_strings). 똑같이 유효합니다.

int main()명령 행 인수를 처리하지 않으려는 경우에는 완전히 생략하여을 생성 할 수도 있습니다 .

다음 프로그램을 시도하십시오 :

#include <iostream>

int main(int argc, char** argv) {
    std::cout << "Have " << argc << " arguments:" << std::endl;
    for (int i = 0; i < argc; ++i) {
        std::cout << argv[i] << std::endl;
    }
}

로 실행 ./test a1 b2 c3하면 출력

Have 4 arguments:
./test
a1
b2
c3

argc명령 행에서 프로그램으로 전달되는 인수 수이며 인수 argv배열입니다.

다음과 같이 인수 수를 알고있는 인수를 반복 할 수 있습니다.

for(int i = 0; i < argc; i++)
{
    // argv[i] is the argument at index i
}

sh구문을 사용하여 프로그램을 실행한다고 가정하십시오 .

myprog arg1 arg2 'arg 3'

메인을로 선언하면 int main(int argc, char *argv[])(대부분의 환경에서) 다음 main()과 같이 호출됩니다.

p = { "myprog", "arg1", "arg2", "arg 3", NULL };
exit(main(4, p));

그러나 메인을로 선언하면 int main()다음과 같이 호출됩니다.

exit(main());

그리고 당신은 인수가 전달되지 않습니다.

두 가지 추가 사항 :

  1. 이것들은에 대한 두 가지 표준 필수 서명입니다 main. 특정 플랫폼이 추가 인수 또는 다른 반환 유형을 허용하는 경우 이는 확장이며 이식 가능한 프로그램에 의존해서는 안됩니다.
  2. *argv[]그리고 **argv당신이 쓸 수 있도록 정확히 동일 int main(int argc, char *argv[])int main(int argc, char **argv).

main프로그램 시작시 제공된 명령 행 매개 변수를 나타내는 매개 변수입니다. argc매개 변수는 명령 줄 인수의 수를 나타내고, char *argv[]커맨드 라인 상에 제공된 각각의 인수를 나타내는 문자열 (문자 포인터) 배열이다.


main함수는 두 개의 매개 변수를 가지고 있습니다 argcargv. argc정수 ( int) 매개 변수이며 프로그램에 전달 된 인수의 수입니다.

프로그램 이름은 항상 첫 번째 인수이므로 프로그램에는 최소한 하나의 인수가 있으며 최소값 argc은 1입니다. 그러나 프로그램 자체에 두 개의 인수가있는 경우 값은 argc3입니다.

매개 변수 argv는 문자열 배열을 가리키며 인수 벡터 라고합니다 . 함수 인수로 구성된 1 차원 문자열 배열입니다.


첫 번째 매개 변수는 제공된 인수 수이고 두 번째 매개 변수는 해당 인수를 나타내는 문자열 목록입니다.


int main();

이것은 간단한 선언입니다. 명령 행 인수를 사용할 수 없습니다.

int main(int argc, char* argv[]);

이 선언은 프로그램이 명령 행 인수를 가져와야 할 때 사용됩니다. 다음과 같이 실행할 때 :

myprogram arg1 arg2 arg3

argc, 또는 인수 개수는 4 (4 개의 인수)로 설정되고 argv인수 벡터는 "myprogram", "arg1", "arg2"및 "arg3"에 대한 문자열 포인터로 채워집니다. 프로그램 호출 ( myprogram)이 인수에 포함됩니다!

또는 다음을 사용할 수 있습니다.

int main(int argc, char** argv);

이것도 유효합니다.

추가 할 수있는 다른 매개 변수가 있습니다.

int main (int argc, char *argv[], char *envp[])

envp매개 변수에는 환경 변수도 포함됩니다. 각 항목은 다음 형식을 따릅니다.

VARIABLENAME=VariableValue

이처럼 :

SHELL=/bin/bash    

환경 변수 목록은 null로 종료됩니다.

중요 : 모든 사용하지 마십시오 argv또는 envp호출에 값을 직접 system()! 이것은이다 거대한 대규모 피해 원인 악의적 인 사용자가 (잠재적으로) 명령 줄 명령에 환경 변수를 설정하고 수 있기 때문에 보안 구멍. 일반적으로을 사용하지 마십시오 system(). 거의 항상 C 라이브러리를 통해 더 나은 솔루션이 구현됩니다.


둘다

int main(int argc, char *argv[]);
int main();

C 또는 C ++ 프로그램의 진입 점에 대한 법적 정의입니다. Stroustrup : C ++ 스타일 및 기술 FAQ 에는 기본 기능에 대해 가능하거나 합법적 인 일부 변형이 자세히 설명되어 있습니다.

참고 URL : https://stackoverflow.com/questions/3024197/what-does-int-argc-char-argv-mean



반응형