argc และ argv
อ่านอาร์กิวเมนต์ของโปรแกรม
argc และ argv เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
โปรแกรมรับอาร์กิวเมนต์
เมื่อคุณเรียกใช้โปรแกรมจากเทอร์มินัล คุณสามารถส่งคำเพิ่มเติมที่เรียกว่าอาร์กิวเมนต์บรรทัดคำสั่งให้โปรแกรมได้
ภาษา C ส่งค่าเหล่านี้ให้ main ผ่านพารามิเตอร์สองตัว ได้แก่ argc (จำนวนอาร์กิวเมนต์) และ argv (เวกเตอร์อาร์กิวเมนต์)
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("This program received %d arguments\n", argc);
return 0;
}รูปแบบการประกาศ main
รูปแบบเต็มของ main คือ:
int main(int argc, char *argv[])
argc คือจำนวนอาร์กิวเมนต์ ส่วน argv คืออาร์เรย์ของตัวชี้สตริง โดยมีหนึ่งตัวต่อหนึ่งอาร์กิวเมนต์
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("argc = %d\n", argc);
return 0;
}argv[0] คือชื่อโปรแกรม
องค์ประกอบแรก argv[0] คือชื่อ (หรือพาธ) ที่ใช้เรียกใช้โปรแกรม
ด้วยเหตุนี้ argc จึงมีค่าอย่างน้อย 1 แม้ผู้ใช้จะไม่ได้ส่งอาร์กิวเมนต์เพิ่มเติมมา
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Program name: %s\n", argv[0]);
return 0;
}การพิมพ์อาร์กิวเมนต์ทั้งหมด
คุณสามารถวนลูปตั้งแต่ดัชนี 0 ถึง argc - 1 เพื่อเข้าถึงสตริงอาร์กิวเมนต์ทุกตัวใน argv
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}argv ลงท้ายด้วย null
ตามมาตรฐาน C รับประกันว่า argv[argc] เป็นพอยน์เตอร์ NULL
ซึ่งหมายความว่าคุณสามารถวนลูปจนพบ NULL แทนการใช้ argc ได้ แม้ว่าการนับด้วย argc จะเป็นวิธีที่ใช้กันมากกว่า
#include <stdio.h>
int main(int argc, char *argv[]) {
char **p = argv;
while (*p != NULL) {
printf("%s\n", *p);
p++;
}
return 0;
}อาร์กิวเมนต์เป็นสตริงเสมอ
อาร์กิวเมนต์ทุกตัวจะมาในรูปของ สตริง แม้แต่ตัวเลข หากผู้ใช้ส่ง 42 มา คุณจะได้รับข้อความ "42" ไม่ใช่จำนวนเต็ม
คุณต้องแปลงค่าเองด้วยฟังก์ชันอย่าง atoi หรือ strtol
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc > 1) {
int n = atoi(argv[1]);
printf("Number plus one is %d\n", n + 1);
} else {
printf("Pass a number\n");
}
return 0;
}การตรวจสอบจำนวนอาร์กิวเมนต์
ตรวจสอบ argc ก่อนอ่าน argv[i] เสมอ การเข้าถึงดัชนีที่เกินจำนวนอาร์กิวเมนต์ที่ส่งมาเป็นพฤติกรรมที่ไม่ได้กำหนดไว้
โดยทั่วไปจะใช้เงื่อนไขป้องกันเพื่อตรวจว่ามีอาร์กิวเมนต์เพียงพอหรือไม่ และพิมพ์ข้อความวิธีใช้งานหากไม่เพียงพอ
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <name>\n", argv[0]);
return 1;
}
printf("Hello, %s!\n", argv[1]);
return 0;
}การใช้รหัสออกที่ไม่ใช่ศูนย์
เมื่ออาร์กิวเมนต์ไม่ถูกต้อง ให้คืนค่าที่ไม่ใช่ศูนย์จาก main เพื่อส่งสัญญาณความล้มเหลวไปยังเชลล์
ตามธรรมเนียม 0 หมายถึงสำเร็จ และค่าอื่น ๆ หมายถึงเกิดข้อผิดพลาด
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Need exactly 2 arguments\n");
return 1;
}
printf("Got both arguments\n");
return 0;
}การหาผลรวมของอาร์กิวเมนต์ตัวเลข
ตัวอย่างที่ใช้ได้จริงคือ การบวกตัวเลขทั้งหมดที่ส่งผ่านบรรทัดคำสั่ง โดยแปลงแต่ละค่าด้วย atoi แล้วสะสมเป็นผลรวม
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int sum = 0;
for (int i = 1; i < argc; i++) {
sum += atoi(argv[i]);
}
printf("Sum = %d\n", sum);
return 0;
}รูปแบบการเขียน argv อีกแบบ
คุณอาจเห็น char **argv แทน char *argv[] ทั้งสองแบบมีความหมายเหมือนกันเมื่อใช้เป็นพารามิเตอร์ของฟังก์ชัน นั่นคือพอยน์เตอร์ไปยังพอยน์เตอร์สตริงตัวแรก
ทั้งสองแบบทำให้คุณใช้ดัชนี argv[i] ได้
#include <stdio.h>
int main(int argc, char **argv) {
if (argc > 1)
printf("First arg: %s\n", argv[1]);
return 0;
}การพิมพ์อาร์กิวเมนต์กลับออกมา
คำสั่ง echo แบบดั้งเดิมจะพิมพ์อาร์กิวเมนต์ของคำสั่งออกมาอย่างง่าย ๆ ต่อไปนี้คือรุ่นขั้นต่ำที่เชื่อมอาร์กิวเมนต์ด้วยช่องว่าง
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
printf("%s", argv[i]);
if (i < argc - 1) printf(" ");
}
printf("\n");
return 0;
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจของคุณเกี่ยวกับ argc และ argv
สรุปทบทวน
คุณได้เรียนรู้วิธีที่โปรแกรมอ่านข้อมูลเข้าจากบรรทัดคำสั่ง:
main(int argc, char *argv[])รับจำนวนและอาร์เรย์- argv[0] คือชื่อโปรแกรม อาร์กิวเมนต์จริงเริ่มที่ดัชนี 1
argv[argc]คือ NULL- อาร์กิวเมนต์เป็น สตริง เสมอ ให้แปลงตัวเลขด้วย
atoiและตรวจสอบargcก่อน
คำถามที่พบบ่อย
บทเรียน “argc และ argv” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “argc และ argv” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “argc และ argv”
อ่านอาร์กิวเมนต์ของโปรแกรม คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “argc และ argv” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม
ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- argc และ argv
- การแยกวิเคราะห์ตัวเลือก
- getopt
- การสร้างเครื่องมือ CLI