C 语言编程 — 指令行参数
2020-04-06 17:56 云物互联 阅读(361) 评论(0) 收藏 举报目录
前文列表
《程序编译流程与 GCC 编译器》
《C 语言编程 — 基本语法》
《C 语言编程 — 基本数据类型》
《C 语言编程 — 变量与常量》
《C 语言编程 — 运算符》
《C 语言编程 — 逻辑控制语句》
《C 语言编程 — 函数》
《C 语言编程 — 高级数据类型 — 指针》
《C 语言编程 — 高级数据类型 — 数组》
《C 语言编程 — 高级数据类型 — 字符串》
《C 语言编程 — 高级数据类型 — 枚举》
《C 语言编程 — 高级数据类型 — 结构体与位域》
《C 语言编程 — 高级数据类型 — 共用体》
《C 语言编程 — 高级数据类型 — void 类型》
《C 语言编程 — 数据类型的别名》
《C 语言编程 — 数据类型转换》
《C 语言编程 — 宏定义与预处理器指令》
《C 语言编程 — 异常处理》
《C 语言编程 — 头文件》
《C 语言编程 — 输入/输出与文件操作》
《C 语言编程 — 堆栈与内存管理》
命令行参数
C 语言支持在执行程序时,从命令行传入参数值给程序,这些值被称为命令行参数。当希望从外部控制程序,而不是在代码内对这些值进行硬编码时,非常常见的一种手段。命令行参数是使用 main() 函数参数来处理的:
int argc:标识传入的参数的个数。char *argv[]:是一个字符串指针数组,指向传递给程序的每个参数。
#include <stdio.h>
int main(int argc, char *argv[]) {
    printf("Program name %s\n", argv[0]);
    if (argc == 2) {
        printf("The argument supplied is %s\n", argv[1]);
    }
    else if (argc > 2) {
        printf("Too many arguments supplied.\n");
    }
    else {
        printf("One argument expected.\n");
    }
}
运行:
$ ./main fanguiju
Program name ./main
The argument supplied is fanguiju
其中,argv[0] 存储的是程序的名称,argv[1] 才是指向第一个命令行参数的指针,*argv[n] 则是最后一个参数。如果没有提供任何参数,argc 将为 1,否则,如果传递了一个参数,argc 将被设置为 2。
多个命令行参数之间用空格分隔,但是如果参数本身带有空格,那么传递参数的时候应把参数放置在双引号 “” 或单引号 ‘’ 内部。
需要注意的是,也可以使用 char **argv 代替 char *argv[] 形参,以下几个概念竟然让人混淆:
int aArray[5] = {1, 2, 3, 4, 5};  // 数组变量。
char greeting[] = "Hello";        // 字符串变量,本质是一个以 null 字符结尾的字符数组。
char *ch;                         // 字符指针变量,指向字符的指针。
char *stuname_temp[STUDENT_NUM];  // 指针数组变量,每个元素都指向字符(或字符串)的指针的数组。
char **ch;                        // 指针指针变量,指向字符指针的指针。
当 STUDENT_NUM 为 1 或不填写时,char *stuname_temp[STUDENT_NUM] 和 char **ch 的变量名本质是一致的。我们在数组章节提到过,数组变量名就是指向数组第一个元素的指针,如果这个元素的值是一个指针,那么数组变量名的本质就是一个指针指针。
#include <stdio.h>
int main() {
    char **a;
    char *b[] = {0};
    printf("a: %lu\n", sizeof(a));
    printf("b: %lu\n",  sizeof(b));
    return 0;
}
运行:
$ ./main
a: 8
b: 8
                                    
                    
                
                
            
        
浙公网安备 33010602011771号