main() รับ Argument ได้ไหม?
ได้** ฟังก์ชัน main() สามารถรับ Arguments จาก Command Line ได้ 2 ตัว:
argc (Argument Count) - จำนวน Argument
argv (Argument Vector) - Array ของ String Arguments
Signature มาตรฐาน
int main(int argc, char *argv[]) {
// หรือ
int main(int argc, char **argv)
}
รายละเอียด
| Parameter | Type | คำอธิบาย |
| argc | int | จำนวน Argument (รวม Program Name เสมอ ≥ 1) |
| argv | char *[] | Array ของ String: argv[0] = Program Name, argv[1...] = Arguments |
ตัวอย่างโปรแกรม
#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]);
}
return 0;
}
วิธี Run และผลลัพธ์
$ gcc main_args.c -o main_args
$ ./main_args hello world 123
argc = 4
argv[0] = ./main_args
argv[1] = hello
argv[2] = world
argv[3] = 123
Windows (Command Prompt)
> main_args.exe hello world 123
argc = 4
argv[0] = main_args.exe
argv[1] = hello
argv[2] = world
argv[3] = 123
การประยุกต์ใช้จริง
#include
#include
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Usage: %s \n", argv[0]);
return 1;
}
FILE *in = fopen(argv[1], "r");
FILE *out = fopen(argv[2], "w");
if (!in || !out) {
perror("File error");
return 1;
}
// Copy file...
fclose(in);
fclose(out);
return 0;
}
ข้อควรระวัง
argv[0] อาจเป็น Full Path หรือแค่ชื่อโปรแกรม ขึ้นกับ OS/Shell
- Arguments ทั้งหมดเป็น **String** ต้องแปลงเองถ้าต้องการตัวเลข (
atoi, strtol)
- Argument ที่มี Space ต้อง Quote:
./prog "hello world"
- Max Arguments ขึ้นกับ OS (Linux: ARG_MAX ~ 2MB)