Đối số dòng lệnh

Có thể chuyển một số giá trị từ dòng lệnh sang các chương trình Objective-C của bạn khi chúng được thực thi. Các giá trị này được gọi làcommand line arguments và nhiều khi chúng rất quan trọng đối với chương trình của bạn, đặc biệt khi bạn muốn kiểm soát chương trình của mình từ bên ngoài thay vì mã hóa cứng các giá trị đó bên trong mã.

Các đối số dòng lệnh được xử lý bằng cách sử dụng các đối số của hàm main () trong đó argc đề cập đến số lượng đối số được truyền và argv[]là một mảng con trỏ, trỏ đến từng đối số được truyền vào chương trình. Sau đây là một ví dụ đơn giản, kiểm tra xem có bất kỳ đối số nào được cung cấp từ dòng lệnh hay không và thực hiện hành động tương ứng:

#import <Foundation/Foundation.h>

int main( int argc, char *argv[] ) {
   if( argc == 2 ) {
      NSLog(@"The argument supplied is %s\n", argv[1]);
   } else if( argc > 2 ) {
      NSLog(@"Too many arguments supplied.\n");
   } else {
      NSLog(@"One argument expected.\n");
   }
}

Khi đoạn mã trên được biên dịch và thực thi với một đối số, chẳng hạn như "testing", nó tạo ra kết quả sau.

2013-09-13 03:01:17.333 demo[7640] The argument supplied is testing

Khi đoạn mã trên được biên dịch và thực thi với hai đối số, chẳng hạn như testing1 và testing2, nó sẽ tạo ra kết quả sau.

2013-09-13 03:01:18.333 demo[7640] Too many arguments supplied.

Khi đoạn mã trên được biên dịch và thực thi mà không truyền bất kỳ đối số nào, nó sẽ tạo ra kết quả như sau.

2013-09-13 03:01:18.333 demo[7640] One argument expected

Cần lưu ý rằng argv[0] giữ tên của chính chương trình và argv[1]là một con trỏ đến đối số dòng lệnh đầu tiên được cung cấp và * argv [n] là đối số cuối cùng. Nếu không có đối số nào được cung cấp, thì argc sẽ là một, ngược lại nếu bạn chuyển một đối số thìargc được đặt ở 2.

Bạn chuyển tất cả các đối số dòng lệnh được phân tách bằng dấu cách, nhưng nếu bản thân đối số có khoảng trắng, thì bạn có thể chuyển các đối số như vậy bằng cách đặt chúng bên trong dấu ngoặc kép "" hoặc dấu nháy đơn ''. Hãy để chúng tôi viết lại ví dụ trên một lần nữa, nơi chúng tôi sẽ in tên chương trình và chúng tôi cũng chuyển đối số dòng lệnh bằng cách đặt bên trong dấu ngoặc kép:

#import <Foundation/Foundation.h>

int main( int argc, char *argv[] ) {
   NSLog(@"Program name %s\n", argv[0]);
 
   if( argc == 2 ) {
      NSLog(@"The argument supplied is %s\n", argv[1]);
   } else if( argc > 2 ) {
      NSLog(@"Too many arguments supplied.\n");
   } else {
      NSLog(@"One argument expected.\n");
   }
   
   return 0;
}

Khi đoạn mã trên được biên dịch và thực thi với một đối số duy nhất được phân tách bằng dấu cách nhưng bên trong dấu ngoặc kép cho biết "Testing1 Testing2", nó tạo ra kết quả sau.

2017-11-30 06:36:59.081 main[71010] Program name main
2017-11-30 06:36:59.082 main[71010] One argument expected.