我正在创建一个非常简单的C程序调用{{1}},它将:
1)列出目录中将文件存储在数组中的文件
到目前为止我有这个代码,但似乎没有用。
{}
答案 0 :(得分:3)
您需要使用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]
包含应包含指向字符串的指针 程序之前主机环境实现定义的值 启动。目的是向计划提供确定的信息 在从托管环境中的其他位置启动程序之前。如果 主机环境无法为字符串提供字符串 无论是大写还是小写,实施都应确保 字符串以小写形式接收。- 如果argc的值大于零,则
argv[0]
指向的字符串表示 程序名称;如果程序,argv[0][0]
应为空字符 名称在主机环境中不可用。如果是argc的值 大于一,argv[1]
指向的字符串argv[argc-1]
代表程序参数。
答案 1 :(得分:2)
而不是
if (-ad)
你必须写一些像
这样的东西if (strcmp(argv[1],"-ad")==0)
if (-ah)
答案 2 :(得分:2)
您尝试读取命令行参数的方式是错误的
鉴于
int main(int argc, const char * argv[])
程序的第一个参数(例如“-ad”)将存储在argv[1]
中。您需要分析该字符串以了解您的程序应该做什么。
Here's argc和argv的基本介绍。在现实世界的程序中也应该有一些保护:例如,程序应该通过检查argc来检查它是否实际上是通过参数调用的:
if (argc < 2) {
printf("What do you want me to do?\n");
return 3;
}
或者 - 但尝试通过至少手动处理命令行参数来使其工作 - 您可以将整个命令行处理委派给getopt。