五 命令行参数
在 C 和 C++ 中,int main(int argc, char **argv) 是程序主函数的一种标准签名,用于接收命令行参数。。
1. main 函数的参数
1.1 main 函数的基本形式
C 和 C++ 标准允许 main 函数有几种签名,其中最常用的是:
C int main ( int argc , char ** argv )
argc :表示命令行参数的数量(argument count),包括程序名本身。
argv :表示命令行参数的内容(argument vector),是一个字符串数组。
1.2 命令行参数示例
假设你在终端运行程序:
Bash ./myprogram hello world 123
- argc = 4(4 个参数:myprogram, hello, world, 123)。
- argv 是一个数组,包含指向这些字符串的指针:
- argv[0] = "myprogram"(程序名)。
- argv[1] = "hello"。
- argv[2] = "world"。
- argv[3] = "123"。
- argv[4] = NULL(标记数组结束)。
2. 为什么用 char**?
char** 是指向指针的指针 :
char*:指向一个字符数组(字符串)。
char**:指向一个指针数组,而这些指针又指向字符串。
内存视图 :
argv 是一个指针,指向一个连续的 char* 数组。
每个 char* 指向内存中某个字符串的起始地址。
3. 简单示例
C #include <stdio.h>
int main ( int argc , char ** argv ) {
printf ( "Argument count: %d \n " , argc );
for ( int i = 0 ; i < argc ; i ++ ) {
printf ( "argv[%d]: %s \n " , i , argv [ i ]);
}
return 0 ;
}
- 运行:./program hello world
- 输出:
Text Only Argument count: 3
argv[0]: ./program
argv[1]: hello
argv[2]: world
检查 argv 的结束
- argv[argc] 总是 NULL,可以用作循环终止条件:
C #include <stdio.h>
int main ( int argc , char ** argv ) {
int i = 0 ;
while ( argv [ i ] != NULL ) {
printf ( "argv[%d]: %s \n " , i , argv [ i ]);
i ++ ;
}
return 0 ;
}
等价写法:char *argv[]
- char **argv 和 char *argv[] 是等价的:
- char *argv[] 是数组形式,更直观地表示“指针数组”。
- 在函数参数中,数组会退化为指针,因此 char *argv[] 等同于 char **argv。
C int main ( int argc , char * argv []) {
printf ( "argv[0]: %s \n " , argv [ 0 ]);
return 0 ;
}
4. argv中字符串转换为其他类型
C++ 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include <iostream>
#include <cstdlib> // for atoi, atof
int main ( int argc , char ** argv )
{
if ( argc < 3 )
{
std :: cout << "Please provide at least two arguments" >> std :: endl ;
}
// 获取第一个参数并转换为整数
int int_value = std :: atoi ( argv [ 1 ]);
// 获取第二个参数并转换为浮点数
float float_value = std :: atof ( argv [ 2 ]);
std :: cout << "Integer value: " << int_value << std :: endl ;
std :: cout << "Float value: " << float_value << std :: endl ;
}