int argc, char * argv []은 무슨 뜻인가요?
많은 C ++ IDE와 컴파일러에서 주요 함수를 생성 할 때 다음과 같이 보입니다.
int main(int argc, char *argv[])
명령 줄 컴파일러를 사용하여 IDE없이 C ++을 코딩 할 때 다음과 같이 입력합니다.
int main()
매개 변수없이 이것이 무엇을 의미하며 내 프로그램에 중요합니까?
argv
및 argc
명령 줄 인수를 전달하는 방법입니다 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());
그리고 당신은 인수가 전달되지 않습니다.
두 가지 추가 사항 :
- 이것들은에 대한 두 가지 표준 필수 서명입니다
main
. 특정 플랫폼이 추가 인수 또는 다른 반환 유형을 허용하는 경우 이는 확장이며 이식 가능한 프로그램에 의존해서는 안됩니다. *argv[]
그리고**argv
당신이 쓸 수 있도록 정확히 동일int main(int argc, char *argv[])
로int main(int argc, char **argv)
.
main
프로그램 시작시 제공된 명령 행 매개 변수를 나타내는 매개 변수입니다. argc
매개 변수는 명령 줄 인수의 수를 나타내고, char *argv[]
커맨드 라인 상에 제공된 각각의 인수를 나타내는 문자열 (문자 포인터) 배열이다.
main
함수는 두 개의 매개 변수를 가지고 있습니다 argc
및 argv
. argc
정수 ( int
) 매개 변수이며 프로그램에 전달 된 인수의 수입니다.
프로그램 이름은 항상 첫 번째 인수이므로 프로그램에는 최소한 하나의 인수가 있으며 최소값 argc
은 1입니다. 그러나 프로그램 자체에 두 개의 인수가있는 경우 값은 argc
3입니다.
매개 변수 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
'Programing' 카테고리의 다른 글
명시 적 약속 건설 반 패턴은 무엇이며 어떻게 방지합니까? (0) | 2020.02.15 |
---|---|
Java Swing에서 set (Preferred | Maximum | Minimum) Size 메서드를 사용하지 않아야합니까? (0) | 2020.02.15 |
이미지가 변경된 후 도커 컨테이너를 업그레이드하는 방법 (0) | 2020.02.15 |
쉘 스크립트에서 줄 바꿈이없는 'echo' (0) | 2020.02.15 |
jQuery는 텍스트를 얻는다 (0) | 2020.02.15 |