Hướng dẫn lập trình C trên Linux phần 22 - Truy cập đối số dòng lệnh trong chương trình C

theanh

Administrator
Nhân viên
Trong hướng dẫn trước, chúng ta đã thảo luận về nhiều khái niệm liên quan đến con trỏ trong ngôn ngữ lập trình C. Một trong những khái niệm chúng ta đã thảo luận là mảng con trỏ. Chúng ta đã sử dụng ví dụ về mảng con trỏ số nguyên để chứng minh khái niệm này.

Cách truy cập các đối số dòng lệnh trong chương trình C​

Nhưng như đã đề cập trong hướng dẫn đó, một mảng con trỏ có thể có nhiều kiểu khác nhau. Ví dụ, đây là một mảng các con trỏ ký tự:
Mã:
char *arr[] = {"HowtoForge", "FaqForge", "Linux"};
Và đây là một chương trình nhỏ cho thấy cách sử dụng mảng này:
Mã:
#include 

int main()
{
 char *arr[] = {"HowtoForge", "FaqForge", "Linux"};
 
 printf("\n %s", *arr);
 printf("\n %s", *(arr+1));
 printf("\n %s", *(arr+2));

 
 return 0;
}
'arr' là địa chỉ của phần tử đầu tiên trong mảng này. Bây giờ, vì đây là một mảng các con trỏ, nên phần tử đầu tiên (và tất cả các phần tử khác, được truy cập bằng cách thêm 1 và 2 vào arr) không gì khác ngoài địa chỉ. Vì vậy, để truy cập giá trị được lưu giữ tại địa chỉ đó, chúng ta sử dụng toán tử *.

Sau đây là đầu ra của chương trình này:
Mã:
HowtoForge 
FaqForge 
Linux
Vậy đây là cách bạn truy cập các giá trị từ một mảng các con trỏ ký tự. Bây giờ, bạn hẳn đang nghĩ tại sao chúng ta lại thảo luận về tất cả những điều này?

Vâng, chúng ta đã làm như vậy vì điều này đưa chúng ta đến một khái niệm quan trọng khác, đó là khả năng truy cập các đối số dòng lệnh trong các môi trường hỗ trợ ngôn ngữ lập trình C. Hãy cùng thảo luận chi tiết về điều này.

Như bạn đã biết, 'main' là hàm đầu tiên trong chương trình của bạn được gọi khi chương trình được thực thi. Hàm này được gọi bằng hai đối số: argc và argv. Trong khi phần trước cho bạn biết về số lượng đối số dòng lệnh, phần sau thực sự là một mảng các con trỏ đến chính các đối số.

Xin lưu ý rằng tên của chính chương trình được truyền dưới dạng đối số cho hàm main. Vì vậy, vì lý do này, số lượng đối số - được biểu thị bằng argc - nhiều hơn một so với số lượng đối số thực tế được truyền cho chương trình. Sau đây là một ví dụ:
Mã:
#include 

int main(int argc, char *argv[])
{
 printf("\n %d", argc);
 printf("\n %s", *argv);
 
 return 0;
}
Bây giờ, chúng ta đã chạy chương trình này - được gọi là a.out và hiển thị trong thư mục 'home' của hệ thống - mà không có bất kỳ đối số nào. Và đây là kết quả đầu ra:
Mã:
1 
 /home/a.out
Vì vậy, bạn có thể thấy tên thực thi của chương trình đã được truyền dưới dạng đối số. Nếu tôi sử dụng lệnh sau:
Mã:
/home/a.out htf ff
Trong trường hợp đó, argc sẽ là 3 và argv sẽ chứa địa chỉ của các chuỗi '/home/a.out', 'htf' và 'ff'.

Sau đây là một cách tốt hơn để viết chương trình in đối số:
Mã:
#include 

int main(int argc, char *argv[])
{
 for(int i=0; i
 
Back
Bên trên