C语言命令行参数的使用详解
C语言程序可以通过命令行参数向程序传递参数。命令行参数指的是在程序名后的一系列字符串,通俗点说就是我们在终端输入程序名后加上的一些参数。比如./program -a b
中的-a
和b
就是命令行参数。
命令行参数的格式
命令行参数的格式通常是这样的:
./<executable> arg1 arg2 ...
每个参数中间以空格隔开。如果参数中需要包含空格等特殊字符,则需要用引号括起来。
获取命令行参数
C语言中获取命令行参数需要使用main()
函数。它可以通过以下两种形式来接受命令行参数:
int main(int argc, char *argv[])
或
int main(int argc, char **argv)
其中,argc
表示传递参数的个数,包括程序名。argv
则是一个字符串数组,存储了每个参数的值。程序名存储在argv[0]
中,后面的参数以此类推。
下面是一个简单的示例:
#include <stdio.h>
int main(int argc, char *argv[]) {
int i;
for (i = 0; i < argc; i++) {
printf("Argument %d: %s\n", i, argv[i]);
}
return 0;
}
这个程序会输出每个命令行参数的值。将上面代码保存在test.c
中,使用gcc -o test test.c
命令编译,然后在终端输入./test hello world 123
即可看到输出:
Argument 0: ./test
Argument 1: hello
Argument 2: world
Argument 3: 123
示例
程序功能
下面是一个简单的例子。这个程序可以读取一个文件的内容,并将其中的单词转换为大写。文件名由命令行参数传递。
#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
FILE *fp;
int c;
if (argc < 2) {
fprintf(stderr, "Usage: %s filename\n", argv[0]);
return 1;
}
fp = fopen(argv[1], "r");
if (fp == NULL) {
fprintf(stderr, "Cannot open file %s\n", argv[1]);
return 1;
}
while ((c = getc(fp)) != EOF) {
if (islower(c)) {
putchar(toupper(c));
} else {
putchar(c);
}
}
fclose(fp);
return 0;
}
在命令行输入./uppercase test.txt
即可将test.txt
文件中的单词转换为大写。
使用选项参数
下面是一个使用选项参数的示例。程序将会读取一个文件,并统计文件中每个字符出现的次数。可以使用-i
选项忽略大小写,使用-v
选项输出详细信息。
#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
FILE *fp;
int c;
int count[256] = {0};
int ignore_case = 0;
int verbose = 0;
if (argc < 2) {
fprintf(stderr, "Usage: %s [-i] [-v] filename\n", argv[0]);
return 1;
}
int i;
for (i = 1; i < argc; i++) {
if (argv[i][0] == '-') {
int j;
for (j = 1; argv[i][j]; j++) {
if (argv[i][j] == 'i') {
ignore_case = 1;
} else if (argv[i][j] == 'v') {
verbose = 1;
} else {
fprintf(stderr, "Unknown option %c\n", argv[i][j]);
return 1;
}
}
} else {
fp = fopen(argv[i], "r");
if (fp == NULL) {
fprintf(stderr, "Cannot open file %s\n", argv[i]);
return 1;
}
}
}
while ((c = getc(fp)) != EOF) {
if (ignore_case) {
c = tolower(c);
}
count[c]++;
}
if (verbose) {
int i;
for (i = 0; i < 256; i++) {
if (count[i] > 0) {
printf("%c: %d\n", i, count[i]);
}
}
} else {
int i;
for (i = 0; i < 256; i++) {
if (count[i] > 0) {
printf("%c %d\n", i, count[i]);
}
}
}
fclose(fp);
return 0;
}
在命令行输入./charcount -vi test.txt
即可统计test.txt
中每个字符出现的次数,并输出详细信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言命令行参数的使用详解 - Python技术站