Command-Line Arguments in C
1. Overview
- Command-Line Arguments: ํ๋ก๊ทธ๋จ ์คํ ์ ํฐ๋ฏธ๋์์ ์ ๋ฌํ๋ ์
๋ ฅ๊ฐ
argc: ์ ๋ฌ๋ ์ธ์์ ๊ฐ์ (ํ๋ก๊ทธ๋จ ์ด๋ฆ ํฌํจ)argv: ์ ๋ฌ๋ ์ธ์๋ค์ ๋ฌธ์์ด๋ก ์ ์ฅํ๋ ๋ฐฐ์ด
- ๋ชฉ์ : ์์ค์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ์คํ ์ ํ๋ก๊ทธ๋จ์ ๋์์ ์ค์
2. argc & argv
int main(int argc, char *argv[]) {
return 0;
}| ๊ตฌ๋ฌธ | ์๋ฏธ |
|---|---|
argc | Argument Count, ์ธ์ ๊ฐ์ |
argv | Argument Vector, ๋ฌธ์์ด ํฌ์ธํฐ ๋ฐฐ์ด |
argv[0] | ์คํ ํ๋ก๊ทธ๋จ ์ด๋ฆ ๋๋ ๊ฒฝ๋ก |
argv[i] | i๋ฒ์งธ ์ธ์ ๋ฌธ์์ด |
argv[i][j] | i๋ฒ์งธ ๋ฌธ์์ด์ j๋ฒ์งธ ๋ฌธ์ |
์ ๋ ฅ ์์
./run stories15M.bin -n 128 -t 0.8| Index | Value |
|---|---|
argv[0] | "./run" |
argv[1] | "stories15M.bin" |
argv[2] | "-n" |
argv[3] | "128" |
argv[4] | "-t" |
argv[5] | "0.8" |
argc = 6- ๋ชจ๋
argv์์๋ ๋ฌธ์์ด์ด๋ฉฐ, ์ซ์๋ ๋ฌธ์์ด๋ก ์ ๋ฌ๋จ argv[argc]๋NULL
3. ๋ฌธ์์ด ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ
char *argv[];char: ๋ฌธ์ ์๋ฃํchar *: ๋ฌธ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ํฌ์ธํฐchar *argv[]: ๋ฌธ์์ด์ ์์ ์ฃผ์๋ค์ ์ ์ฅํ๋ ๋ฐฐ์ดchar *argv[]์char **argv๋main()์ ๋งค๊ฐ๋ณ์ ์ ์ธ์์ ๋์ผํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
์์:
argv[2] // "-n"
argv[2][0] // '-'
argv[2][1] // 'n'argv[2]: ์ธ ๋ฒ์งธ ์ธ์ ๋ฌธ์์ดargv[2][0]: ํด๋น ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ ๋ฌธ์argv[2][1]: ํด๋น ๋ฌธ์์ด์ ๋ ๋ฒ์งธ ๋ฌธ์
4. ์ธ์ ์ํ
for (int i = 2; i < argc; i += 2) {
printf("%s: %s\n", argv[i], argv[i + 1]);
}i = 2: ์ธ ๋ฒ์งธ ์ธ์๋ถํฐ ์ํi < argc: ์ธ์ ๋ฐฐ์ด ๋ฒ์ ๊ฒ์ฌi += 2: ์ต์ ์ด๋ฆ๊ณผ ๊ฐ์ ํ ์์ฉ ์ฒ๋ฆฌargv[i]: ์ต์ ์ด๋ฆargv[i + 1]: ์ต์ ๊ฐ
์ถ๋ ฅ:
-n: 128
-t: 0.8์ ์ฝ๋๋ ์ต์
๊ณผ ๊ฐ์ด ํญ์ ์์ผ๋ก ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ ์์์ด๋ค. ์ค์ ๊ตฌํ์์๋ i + 1 < argc ์ฌ๋ถ๋ฅผ ๋จผ์ ๊ฒ์ฌํด์ผ ํ๋ค.
5. ๋ฌธ์์ด ์ฒ๋ฆฌ ํจ์
๋ช ๋ นํ ์ธ์๋ ๋ฌธ์์ด์ด๋ฏ๋ก, ์ซ์ ๋ณํ์ด๋ ๋ฌธ์์ด ๋น๊ต๊ฐ ํ์ํ๋ค.
| ํจ์ | ์ญํ | ์์ |
|---|---|---|
strlen() | ๋ฌธ์์ด ๊ธธ์ด ๋ฐํ | strlen("-n") โ 2 |
strcmp() | ๋ฌธ์์ด ๋น๊ต | ๊ฐ์ผ๋ฉด 0 |
atoi() | ๋ฌธ์์ด โ int | "128" โ 128 |
atof() | ๋ฌธ์์ด โ double | "0.8" โ 0.8 |
๋ฌธ์์ด ๋น๊ต
if (strcmp(argv[2], "-n") == 0) {
printf("Step option\n");
}strcmp()๊ฐ0์ ๋ฐํํ๋ฉด ๋ ๋ฌธ์์ด์ด ๋์ผํจ- ๋ฌธ์์ด์ ๋ด์ฉ ๋น๊ต์๋
==๋์strcmp()์ฌ์ฉ
์ซ์ ๋ณํ
int steps = atoi(argv[3]);
float temperature = atof(argv[5]);atoi(): ๋ฌธ์์ด์ ์ ์๋ก ๋ณํatof(): ๋ฌธ์์ด์ ์ค์๋ก ๋ณํatof()์ ๋ฐํํ์double์ด๋ฉฐ,float์ ๋์ ํ๋ฉด ๋ณํ๋จ- ์๊ฒฉํ ์
๋ ฅ ๊ฒ์ฆ์ด ํ์ํ๋ฉด
strtol(),strtof()์ฌ์ฉ
6. ์ ๋ ฅ๊ฐ ๊ฒ์ฌ
if (argc < 2) {
printf("Missing arguments\n");
return 1;
}argc < 2: ํ๋ก๊ทธ๋จ ์ด๋ฆ ์ธ์ ์ธ์๊ฐ ์ ๋ฌ๋์ง ์์ ๊ฒฝ์ฐreturn 1: ์ค๋ฅ ์ํ๋ก ํ๋ก๊ทธ๋จ ์ข ๋ฃ
์ต์ ํ์ ๊ฒ์ฌ:
if (argv[i][0] != '-') {
return 1;
}
if (strlen(argv[i]) != 2) {
return 1;
}argv[i][0] != '-': ์ต์ ์ด-๋ก ์์ํ๋์ง ๊ฒ์ฌstrlen(argv[i]) != 2: ์ต์ ์ด-n์ฒ๋ผ ๋ ๊ธ์์ธ์ง ๊ฒ์ฌ
7. ํต์ฌ ์ ๋ฆฌ
Terminal Input
โ
main(argc, argv)
โ
Argument Parsing
โ
String Comparison / Type Conversion
โ
Variables
โ
Program Executionargc: ์ ๋ ฅ ๊ฐ์ ๊ด๋ฆฌargv: ์ ๋ ฅ ๋ฌธ์์ด ์ ๊ทผstrlen(),strcmp(): ๋ฌธ์์ด ๊ฒ์ฌ ๋ฐ ๋น๊ตatoi(),atof(): ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํfor: ์ฌ๋ฌ ๋ช ๋ นํ ์ต์ ์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ