'main (int argc, char * argv [])'[duplicate] 관련
중복 가능성 :
main ()에 대한 인수는 무엇입니까?
int argc, char * argv []는 무엇을 의미합니까?
모든 프로그램은 main(int argc, char *argv[])
정의 로 시작 됩니다.
무슨 뜻인지 모르겠습니다. 우리가 프로그램에서 사용하지 않는다면 왜 우리가이 주장을 사용하는지 누군가가 설명 할 수 있다면 매우 기쁠 것입니다. 왜 안돼 : int main()
?
의 요소의 프로그램 중 하나의 이름입니다 *argv[]
과 argc
의 인수의 수의 수입니다 *argv[]
? 다른 인수는 무엇으로 전송 *argv[]
됩니까? 어떻게 보내나요?
인수 argc
및 argv
of main
는 프로그램에 인수를 보내는 방법으로 사용됩니다. 아마도 가장 친숙한 방법은 사용자가 cat file
.을 입력 할 수있는 좋은 ol '터미널을 사용하는 것 입니다. 여기서 단어 cat
는 파일을 가져와 표준 출력 ( stdout
)으로 출력하는 프로그램입니다 .
프로그램의 인수의 수를 수신 argc
하고있는 인자의 벡터 argv
에서, 상기 상기 ARG ument C ount 두 (첫 번째 인수로서 프로그램 명 카운트)와 것 아규먼트 ument의 V를 포함 할 엑터 [ cat
, file
, 널 ]. 마지막 요소가 널 포인터 인 동안.
일반적으로 다음과 같이 작성합니다.
int // Specifies that type of variable the function returns.
// main() must return an integer
main ( int argc, char **argv ) {
// code
return 0; // Indicates that everything went well.
}
프로그램에 인수가 필요하지 않은 경우 main
다음과 같은 방식으로 함수 를 작성하는 것도 똑같이 유효합니다 .
int main() {
// code
return 0; // Zero indicates success, while any
// Non-Zero value indicates a failure/error
}
C 언어의 초기 버전에서는 이것이 암시 된 것처럼 int
이전 에는 없었습니다 main
. 오늘날 이것은 오류로 간주됩니다.
에 POSIX 호환 시스템 (및 Windows), 세 번째 매개 변수에 사용할 수있는 가능성이 존재하는 char **envp
프로그램의 벡터 포함 ENV ironment 변수를 . main
함수 의 인수 목록에 대한 추가 변형이 있지만 표준이 아니므로 여기서 자세히 설명하지 않겠습니다.
또한 변수 이름 지정은 관례 이며 실제 의미가 없습니다. 다른 사람을 혼동하지 않도록 항상이를 준수하는 것이 좋지만 다음 main
과 같이 정의하는 것도 똑같이 유효합니다.
int main(int c, char **v, char **e) {
// code
return 0;
}
두 번째 질문에 대해 프로그램에 인수를 보내는 몇 가지 방법이 있습니다. 난 당신이보고 추천 exec*()
기능의 가족 입니다 POSIX의 - 표준,하지만 아마 쉽게 단지 사용에 있지만, 사용 보통은 모든 시스템에서 작동하도록 보장되지 않는 눈살을 찌푸리게한다. 나는 그것을 직접 테스트하지 않았습니다. 어떤이없는 경우지만 , A * NIX 시스템에 설치 또는 다른 쉘이 실패합니다.system
("command arg1 arg2")
system()
bash
zsh
system()
예를 들어 프로그램이 호출 될 때 명령 줄에서 프로그램에 인수를 전달하기위한 것입니다.
$ gcc mysort.c -o mysort
$ mysort 2 8 9 1 4 5
위의 프로그램 mysort
은 일부 명령 줄 매개 변수를 사용하여 실행됩니다. 내부 main( int argc, char * argv[])
에서는 결과가
Argument Count, argc = 7
7 개의 인수 (프로그램 계산)가 있기 때문에
Argument Vector, argv[] = { "mysort", "2", "8", "9", "1", "4", "5" };
다음은 완전한 예입니다.
$ cat mysort.c
#include <stdio.h>
int main( int argc, char * argv [] ) {
printf( "argc = %d\n", argc );
for( int i = 0; i < argc; ++i ) {
printf( "argv[ %d ] = %s\n", i, argv[ i ] );
}
}
$ gcc mysort.c -o mysort
$ ./mysort 2 8 9 1 4 5
argc = 7
argv[ 0 ] = ./mysort
argv[ 1 ] = 2
argv[ 2 ] = 8
argv[ 3 ] = 9
argv[ 4 ] = 1
argv[ 5 ] = 4
argv[ 6 ] = 5
[ char
문자열 "2", "8"등은 일부 문자를 숫자로 변환 기능을 사용하여 숫자로 변환 할 수 있습니다 atol()
( 예 : (링크 )]).
로 argc
(인수 수)와 argv
(인수 벡터) 당신은 수와 응용 프로그램이 시작되었습니다 전달 된 인수의 값을 얻을 수 있습니다.
이렇게하면 -version
애플리케이션이 다른 방식으로 작동하기 시작할 때 매개 변수 (예 :)를 사용할 수 있습니다 .
But you can also use int main(void)
as a prototype in C.
There is a third (less known and nonstandard) prototype with a third argument which is envp
. It contains environment variables.
Resources:
argc
means the number of argument that are passed to the program. char* argv[]
are the passed arguments. argv[0]
is always the program name itself. I'm not a 100% sure, but I think int main()
is valid in C/C++.
argc
is the number of command line arguments given to the program at runtime, and argv
is an array of arrays of characters (rather, an array of C-strings) containing these arguments. If you know you're not going to need the command line arguments, you can declare your main at taking a void
argument, instead:
int main(void) {
/* ... */
}
이것들은 main
표준 에 따라 정의 된 유일한 두 가지 프로토 타입 이지만 일부 컴파일러는 반환 유형도 허용합니다 void
. 자세한 내용은 Wikipedia에서 확인 하세요.
때 comp.lang.c 자주 묻는 질문 질문과 거래
"main ()의 올바른 선언은 무엇입니까?"의 질문 11.12a .
argc
명령 줄 인수의 수이며 명령 줄 인수를 argv
나타내는 문자열 배열입니다.
이것은 프로그램에 전달 된 인수에 반응 할 수있는 옵션을 제공합니다. 아무것도 기대하지 않는다면 int main
.
You can run your application with parameters such as app -something -somethingelse
. int argc
represents number of these parameters and char *argv[]
is an array with actual parameters being passed into your application. This way you can work with them inside of your application.
참고URL : https://stackoverflow.com/questions/3898021/regarding-mainint-argc-char-argv
'program tip' 카테고리의 다른 글
ffmpeg로 프레임 수 가져 오기 (0) | 2020.09.03 |
---|---|
Python : base64 디코딩시 '잘못된 패딩'오류 무시 (0) | 2020.09.03 |
jQuery에서 "this"안에있는 요소를 선택하는 방법은 무엇입니까? (0) | 2020.09.03 |
PostgreSQL에서 정렬을 사용하여 고정 된 수의 행을 삭제하려면 어떻게해야합니까? (0) | 2020.09.03 |
바이너리 파일 읽기 및 쓰기 (0) | 2020.09.03 |