C++:
การอ่านอาร์กิวเมนต์จากคำสั่งลำดับ
วิธีทำ:
ใน C++, อาร์กิวเมนต์บรรทัดคำสั่งได้รับใน main()
เป็นอาร์เรย์ของตัวชี้อักขระ นี่คือวิธีที่คุณจับพวกมัน:
#include <iostream>
int main(int argc, char* argv[]) {
std::cout << "คุณได้ป้อน " << argc << " อาร์กิวเมนต์:\n";
for (int i = 0; i < argc; ++i) {
std::cout << argv[i] << "\n";
}
return 0;
}
ตัวอย่างผลลัพธ์: (สมมติว่าทำการเรียกใช้เป็น ./myProgram foo bar
)
คุณได้ป้อน 3 อาร์กิวเมนต์:
./myProgram
foo
bar
ลงลึก
ย้อนกลับไปเมื่อก่อน, บรรทัดคำสั่งคือวิธีเดียวในการโต้ตอบกับโปรแกรม หน้าต่างกราฟิกในปัจจุบันนั้นยิ่งใหญ่, แต่บรรทัดคำสั่งยังคงมีอยู่, เฉพาะในสภาพแวดล้อมเซิร์ฟเวอร์หรือการพัฒนา มันเสนอการควบคุมที่รวดเร็วและสามารถเขียนสคริปต์ได้
ทางเลือกสำหรับ argv
และ argc
ที่มาในตัว รวมถึงไลบรารี่เช่น Boost.Program_options
สำหรับการแยกวิเคราะห์ที่ซับซ้อนยิ่งขึ้น ยังมีฟังก์ชัน getopt()
ในระบบที่คล้าย Unix สำหรับแฟนๆ บรรทัดคำสั่งแบบดั้งเดิม
การทำการแยกวิเคราะห์อาร์กิวเมนต์จากเริ่มต้นช่วยให้คุณปรับแต่งได้, แต่ต้องระวังช่องโหว่ด้านความปลอดภัย อย่าเชื่อข้อมูลที่ผู้ใช้ป้อนโดยสิ้นเชิง—ตรวจสอบและทำความสะอาดเสมอ
ดูเพิ่มเติม
- เอกสาร C++ เกี่ยวกับฟังก์ชัน
main()
: https://en.cppreference.com/w/cpp/language/main_function - Boost.Program_options: https://www.boost.org/doc/libs/release/libs/program_options/
- บทแนะนำ GNU
getopt()
: https://www.gnu.org/software/libc/manual/html_node/Getopt.html