C 语言编程 — 指令行参数
目录
前文列表
《程序编译流程与 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"); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
运行:
$ ./main fanguiju
Program name ./main
The argument supplied is fanguiju
- 1
- 2
- 3
其中,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; // 指针指针变量,指向字符指针的指针。
- 1
- 2
- 3
- 4
- 5
当 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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
运行:
$ ./main
a: 8
b: 8
- 1
- 2
- 3
文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。
原文链接:is-cloud.blog.csdn.net/article/details/105347737
- 点赞
- 收藏
- 关注作者
评论(0)