📅  最后修改于: 2023-12-03 14:59:52.554000             🧑  作者: Mango
在编写C程序时,命令行参数是非常常见的。命令行参数是在执行可执行程序时传递给程序的参数。这些参数可以是文件名、选项标志、标志值等。
可以使用main函数中的argc和argv参数来获取命令行参数。
示例代码:
int main(int argc, char *argv[]) {
printf("There are %d arguments\n", argc);
for (int i = 0; i < argc; i++) {
printf("%s\n", argv[i]);
}
return 0;
}
运行命令./program arg1 arg2 arg3
,输出:
There are 4 arguments
./program
arg1
arg2
arg3
选项参数是用来改变程序运行方式的参数。选项参数通常以单个破折号-
或双破折号--
开始,后面跟着一个字母或字符串。
可以使用getopt函数来解析选项参数。getopt函数使用简单的状态机来处理命令行参数:
示例代码:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int opt;
char *output = "default.out";
while ((opt = getopt(argc, argv, "o:")) != -1) {
switch (opt) {
case 'o':
output = optarg;
break;
default:
fprintf(stderr, "Usage: %s [-o output_file] input_file\n", argv[0]);
return 1;
}
}
if (optind >= argc) {
fprintf(stderr, "Expected input file\n");
return 1;
}
char *input = argv[optind];
printf("Input file: %s\nOutput file: %s\n", input, output);
return 0;
}
运行命令./program -o output.txt input.txt
,输出:
Input file: input.txt
Output file: output.txt
需要注意的是,字符串参数通常是指向命令行参数的指针。这意味着这些参数可能已经存储在堆栈中,无法修改。因此,如果需要修改命令行参数,则需要将它们复制到堆中。
示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *name = strdup(argv[1]);
printf("Hello, %s!\n", name);
free(name);
return 0;
}
运行命令./program Alice
,输出:
Hello, Alice!
命令行参数是在执行可执行程序时传递给程序的参数。可以使用main函数中的argc和argv参数来获取命令行参数,或者使用getopt函数来解析选项参数。需要注意命令行参数的内存管理,以避免出现问题。