• [Objective-C语言教程]命令行参数(23)


    执行时,可以将一些值从命令行传递给Objective-C程序。 这些值称为命令行参数,很多时候它们对程序很重要,特别是当想要从外部控制程序而不是在代码中对这些值进行硬编码时就很有用了。

    命令行参数使用main()函数参数处理,其中argc表示传递的参数数量,argv[]是指针数组,指向传递给程序的每个参数。 以下是一个简单的示例,它检查命令行是否提供了任何参数并采取相应的操作 -

     1 #import <Foundation/Foundation.h>
     2 
     3 int main( int argc, char *argv[] ) {
     4    if( argc == 2 ) {
     5       NSLog(@"The argument supplied is %s
    ", argv[1]);
     6    } else if( argc > 2 ) {
     7       NSLog(@"Too many arguments supplied.
    ");
     8    } else {
     9       NSLog(@"One argument expected.
    ");
    10    }
    11 }

    当使用单个参数编译和执行上述代码时,例如使用命令行参数“testing”,它会产生以下结果。

    1 $./main testing
    2 2018-11-15 22:59:51.283 main[79514] The argument supplied is testing

    当使用两个参数(例如testing1testing2)编译和执行上述代码时,它会产生以下结果。

    1 $./main testing testing2
    2 2018-11-15 22:59:51.283 main[79514] Too many arguments supplied.

    当编译并执行上述代码而不传递任何参数时,它会产生以下结果。

    1 $./main testing testing2
    2 2018-11-15 22:59:51.283 main[79514] One argument expected

    应该注意的是,argv [0] 保存程序本身的名称,argv [1]是指向提供的第一个命令行参数的指针,而* argv [n]是最后一个参数。 如果没有提供参数,argc的值将为1,否则如果传递一个参数,则argc设置为2

    传递由空格分隔的所有命令行参数,但如果参数本身有空格,则可以通过将这些参数放在双引号("")或单引号('')中来传递这些参数。再次重写上面的例子,将打印程序名称,也通过放入双引号传递命令行参数 -

     1 #import <Foundation/Foundation.h>
     2 
     3 int main( int argc, char *argv[] ) {
     4    NSLog(@"Program name %s
    ", argv[0]);
     5 
     6    if( argc == 2 ) {
     7       NSLog(@"The argument supplied is %s
    ", argv[1]);
     8    } else if( argc > 2 ) {
     9       NSLog(@"Too many arguments supplied.
    ");
    10    } else {
    11       NSLog(@"One argument expected.
    ");
    12    }
    13 
    14    return 0;
    15 }

    当上面的代码被编译并执行时,一个参数用空格分隔,但在双引号中是"Testing1 Testing2",它会产生以下结果。

    1 2018-11-15 23:05:06.113 main[66421] Program name main
    2 2018-11-15 23:05:06.115 main[66421] One argument expected.
  • 相关阅读:
    Windows phone 应用开发[9]单元测试
    Git Tool Part 2
    Windows phone 应用开发[6]Managed Extensibility Framework应用程序扩展
    也谈存储过程分页
    上传图像到sqlserver
    这两段代码是不同的
    TextBox中的TextChanged和KeyDown事件的小区别
    发现发现返回一条记录的datareader的新用法
    最近好多疑问啊!高手给点意见吧!
    csdn论坛去不了,只有在这里问了
  • 原文地址:https://www.cnblogs.com/strengthen/p/10571654.html
Copyright © 2020-2023  润新知