命令行参数(Command-Line Arguments)
优质
小牛编辑
132浏览
2023-12-01
执行时,可以将一些值从命令行传递给Objective-C程序。 这些值称为command line arguments ,很多时候它们对您的程序很重要,特别是当您想从外部控制程序而不是在代码中对这些值进行硬编码时。
命令行参数使用main()函数参数处理,其中argc表示传递的参数数量, argv[]是指针数组,指向传递给程序的每个参数。 以下是一个简单的示例,它检查命令行是否提供了任何参数并采取相应的操作 -
#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");
}
}
当使用单个参数编译和执行上述代码时,例如“testing”,它会产生以下结果。
2013-09-13 03:01:17.333 demo[7640] The argument supplied is testing
当使用两个参数(例如testing1和testing2)编译和执行上述代码时,它会产生以下结果。
2013-09-13 03:01:18.333 demo[7640] Too many arguments supplied.
当编译并执行上述代码而不传递任何参数时,它会产生以下结果。
2013-09-13 03:01:18.333 demo[7640] One argument expected
应该注意的是, argv[0]保存程序本身的名称, argv[1]是指向提供的第一个命令行参数的指针,* argv [n]是最后一个参数。 如果没有提供参数,argc将为1,否则如果传递一个参数,则argc设置为2。
传递由空格分隔的所有命令行参数,但如果参数本身有空格,则可以通过将这些参数放在双引号“”或单引号中来传递这些参数。 让我们再次重写上面的例子,我们将打印程序名称,我们也通过放入双引号传递命令行参数 -
#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;
}
当上面的代码被编译并执行时,一个参数用空格分隔,但在双引号中说“Testing1 Testing2”,它会产生以下结果。
2017-11-30 06:36:59.081 main[71010] Program name main
2017-11-30 06:36:59.082 main[71010] One argument expected.