Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

การส่ง Argument ไปฟังก์ชัน main() ในภาษา C (Command Line Arguments)


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)
}

รายละเอียด

ตัวอย่างโปรแกรม

#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)
ParameterTypeคำอธิบาย
argcintจำนวน Argument (รวม Program Name เสมอ ≥ 1)
argvchar *[]Array ของ String: argv[0] = Program Name, argv[1...] = Arguments