Linux C 编程教程第 22 部分 - 在 C 程序中访问命令行参数
在此页
- 如何在 C 程序中访问命令行参数
- 结论
在前面的教程中,我们讨论了 C 编程语言中与指针相关的多个概念。我们讨论的概念之一是指针数组。我们使用整数指针数组的示例来演示这个概念。
如何在 C 程序中访问命令行参数
但正如该教程中提到的,指针数组可以是不同类型的。例如,这是一个字符指针数组:
char *arr[] = {"HowtoForge", "FaqForge", "Linux"};
这是一个小程序,展示了如何使用这个数组:
#include <stdio.h>
int main()
{
char *arr[] = {"HowtoForge", "FaqForge", "Linux"};
printf("\n %s", *arr);
printf("\n %s", *(arr+1));
printf("\n %s", *(arr+2));
return 0;
}
arr 是该数组第一个元素的地址。现在,因为这是一个指针数组,所以第一个元素(以及所有其他元素,通过将 1 和 2 加到 arr 来访问)只是地址。因此,要访问保存该地址的值,我们使用 * 运算符。
以下是该程序的输出:
HowtoForge
FaqForge
Linux
这就是您从字符指针数组访问值的方式。现在,你一定在想我们为什么要讨论这一切?
嗯,我们这样做是因为这给我们带来了另一个重要概念,即在支持 C 编程语言的环境中访问命令行参数的能力。让我们详细讨论一下。
现在应该很清楚,main 是程序中第一个在程序执行时被调用的函数。它使用两个参数调用:argc 和 argv。前者告诉您命令行参数的数量,而后者实际上是一个指向参数本身的指针数组。
请注意,程序本身的名称作为参数传递给主函数。所以正因为如此,参数的数量——由 argc 表示——比传递给程序的实际参数数量多一个。下面是一个例子:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("\n %d", argc);
printf("\n %s", *argv);
return 0;
}
现在,我们执行这个程序 - 称为 a.out,并出现在我们系统的主目录中 - 没有任何参数。这是输出:
1
/home/a.out
所以你可以看到程序的执行名称作为参数传递。如果我使用以下命令:
/home/a.out htf ff
那么在那种情况下,argc 将是 3,而 argv 将包含字符串 /home/a.out、htf 和 ff 的地址。
这是编写参数打印程序的更好方法:
#include <stdio.h>
int main(int argc, char *argv[])
{
for(int i=0; i<argc; i++)
printf("\n %s", *(argv+i));
return 0;
}
值得记住的是,参数存储在数组中的顺序与它们在命令行中传递的顺序相同。
结论
您可能会遇到几种情况,其中您必须在 C 代码中处理命令行参数。我们在这里讨论的内容应该成为您的基础。请在您的终端尝试一些程序,以更好地了解如何在 C 程序中访问命令行参数。