我正在创建一个非常简单的 C 程序调用open.c
,它可以:
1)列出目录中的文件,这些文件将文件文本存储在数组中
到目前为止我有这段代码,但它似乎不起作用。
{ }
您需要使用和argv
比较命令行参数。"-ah"
"-ad"
#include <string.h>
if (argc > 2)
{
if (strcmp (argv[1], "-ah") == 0)
{
/* List hidden files */
}
else if (strcmp (argv[1], "-ad") == 0)
{
/* List files */
}
else
{
/* Unknown command-line argument */
}
}
else
{
/* No command-line arguments */
}
参考:
C11 (n1570), § 5.1.2.2.1 程序启动
如果声明了它们,则
main
函数的参数应遵守以下约束:— 的值
argc
应为非负数。—
argv[argc]
应为空指针。— 如果 argc 的值大于零,则
argv[0]
通过argv[argc-1]
inclusive 的数组成员应包含指向字符串的指针,这些指针在程序启动之前由宿主环境赋予实现定义的值。目的是从托管环境中的其他地方向程序提供在程序启动之前确定的信息。如果主机环境不能提供大写和小写字母的字符串,则实现应确保以小写形式接收字符串。— 如果argc的值大于零,则指向的字符串
argv[0]
代表程序名;argv[0][0]
如果主机环境中没有程序名,则应为空字符。如果 argc 的值大于 1,则argv[1]
through 指向的字符串argv[argc-1]
代表程序参数。
代替
if (-ad)
你必须写一些像
if (strcmp(argv[1],"-ad")==0)
相同的if (-ah)
您尝试读取命令行参数的方式是错误的
给定
int main(int argc, const char * argv[])
程序的第一个参数(例如“-ad”)将存储在argv[1]
. 您需要分析该字符串以了解您的程序预期执行的操作。
这是argc 和 argv 的基本介绍。在现实世界的程序中也应该有一些保护:例如,程序应该通过检查 argc 来检查它是否实际上是用参数调用的:
if (argc < 2) {
printf("What do you want me to do?\n");
return 3;
}
或者 - 但尝试通过手动处理命令行参数至少一次来使其工作 - 您可以将整个命令行处理委托给getopt。