도스 창에 program.exe 123 456 이렇게 쳐서 프로그램을 실행했을 때 명령줄 인자들 "program.exe", "123", "456"이 들어있는 일차원 배열(argv - argument vector)과 그 원소 개수(argc - argument count)임.
ㅅㅅㅅ(125.128)2015-05-28 13:51
참고) vector == 일차원 배열
ㅅㅅㅅ(125.128)2015-05-28 13:51
비표준이기는 하지만 main은 int main(int argc, char *argv[], char *envp[]) { ... } 이렇게 짜는 방법도 존재함.
참고로 함수 인자에서 배열은 포인터의 신택스 슈거기 때문에 char *argv[]는 char **argv로 써도 같음. 전자로 쓰는 건 배열임을 프로그래머에게 보다 확실하게 드러내 주려고 쓰는 거고.
ㅅㅅㅅ(125.128)2015-05-28 13:55
ㅇㅇ 배열이 영어로 array.
ㅅㅅㅅ(125.128)2015-05-28 13:56
배열 중에서 일차원 배열과 이차원 배열은 수학에서의 개념을 차용해서 각각 vector와 matrix라고도 부름.
ㅅㅅㅅ(125.128)2015-05-28 13:57
아 뭐야 백터랬잖아
133t(bitsforeveryone)2015-05-28 13:57
ㅋㅋㅋ 햇갈렸다
133t(bitsforeveryone)2015-05-28 13:58
그래서 argument vector는 인자들을 가진 일차원 배열(vector)이라는 뜻.
ㅅㅅㅅ(125.128)2015-05-28 13:58
ㅇㅋㅇㅋ
133t(bitsforeveryone)2015-05-28 13:58
배열 == array. 일차원 배열 == vector. 이차원 배열 == matrix.
ㅅㅅㅅ(125.128)2015-05-28 13:58
배열에 있는 argv[0] 는 프로그램이름
133t(bitsforeveryone)2015-05-28 13:58
argv[1]은 어떤거야?
133t(bitsforeveryone)2015-05-28 13:58
사족으로 아주 옛~날 구형 유닉스 머신에서는 argv[0] 바꿔서 프로세스 이름 바꾸는 트릭도 가능했었다는데. 이젠 옛말이고. 아무튼 argv[0]이 프로그램 이름 맞음. ㅇㅇ
ㅅㅅㅅ(125.128)2015-05-28 13:59
위에 적어놨잖아. 프로그램 파일 이름이 program.exe일 때 도스 창에서 program 123 456 이렇게 프로그램을 실행하면 argv[0] => "program", argv[1] => "123", argv[2] => "456" 으로 데이터가 들어간다고. 참고로 표준에 의해 argv[3] ==> NULL임.
ㅅㅅㅅ(125.128)2015-05-28 13:59
아항 그럼 보통 실행할때 프로그램은 argument 두개까지 받을 수 있어? argv[3]은 null 이니까?
도스 창에 program.exe 123 456 이렇게 쳐서 프로그램을 실행했을 때 명령줄 인자들 "program.exe", "123", "456"이 들어있는 일차원 배열(argv - argument vector)과 그 원소 개수(argc - argument count)임.
참고) vector == 일차원 배열
비표준이기는 하지만 main은 int main(int argc, char *argv[], char *envp[]) { ... } 이렇게 짜는 방법도 존재함.
근데나도 씨쪽 2년 그냥했는데 저런메인안씀 ㅠ 왜쓰는거임?
일차원 배열이 뭐여 ㅠㅠ
int main(int num_args, char** arg_strings)
배열 모르면 저거 이해 못하지;;
배열부터 배우고 오3
argc = argument count(개수), argv = argument vector(일차원 배열).
env는 환경변수고
배열이 array같은거야?
참고로 함수 인자에서 배열은 포인터의 신택스 슈거기 때문에 char *argv[]는 char **argv로 써도 같음. 전자로 쓰는 건 배열임을 프로그래머에게 보다 확실하게 드러내 주려고 쓰는 거고.
ㅇㅇ 배열이 영어로 array.
배열 중에서 일차원 배열과 이차원 배열은 수학에서의 개념을 차용해서 각각 vector와 matrix라고도 부름.
아 뭐야 백터랬잖아
ㅋㅋㅋ 햇갈렸다
그래서 argument vector는 인자들을 가진 일차원 배열(vector)이라는 뜻.
ㅇㅋㅇㅋ
배열 == array. 일차원 배열 == vector. 이차원 배열 == matrix.
배열에 있는 argv[0] 는 프로그램이름
argv[1]은 어떤거야?
사족으로 아주 옛~날 구형 유닉스 머신에서는 argv[0] 바꿔서 프로세스 이름 바꾸는 트릭도 가능했었다는데. 이젠 옛말이고. 아무튼 argv[0]이 프로그램 이름 맞음. ㅇㅇ
위에 적어놨잖아. 프로그램 파일 이름이 program.exe일 때 도스 창에서 program 123 456 이렇게 프로그램을 실행하면 argv[0] => "program", argv[1] => "123", argv[2] => "456" 으로 데이터가 들어간다고. 참고로 표준에 의해 argv[3] ==> NULL임.
아항 그럼 보통 실행할때 프로그램은 argument 두개까지 받을 수 있어? argv[3]은 null 이니까?
argc가 4 이상이 안된다는거네?
인자 100개를 주면 argv[0] == 프로그램 이름, argv[1]~argv[100] == 인자들, argv[101] == NULL이 되겠지.
아하아아 오케이 이해함 이해함
그냥 예시를 들어서 argv에 어떤 내용이 들어가나 분석한 거지 무조건 argv[3]이 NULL이 되는 건 아님. 마지막 인자 다음의 argv는 항상 NULL이 들어간다공~
그래서 argc 없어도 while(*argv) puts(*argv++); 하면 인자 쫙 화면에 출력할 수 있음.
그떄 argc는 102인가? 아니면 101인가? null도 세?
argv[argc] == NULL이라는 거임. NULL은 argc에 포함 안 시키지.
아하 그럼 argc는 프로그램 이름 포함 101개?
101개 아니고 101
그렇제~
http://autogram.tk/이
중고차 어플리케이션 어떤가요?