Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 处理命令行参数?_C_Unix_Command Line Arguments - Fatal编程技术网

C 处理命令行参数?

C 处理命令行参数?,c,unix,command-line-arguments,C,Unix,Command Line Arguments,所以,我可以让我的程序运行,但如果 $ ./a.out -f Text.txt 我只是不知道如何让程序建立-f表示文件的连接。执行此操作的逻辑是什么?函数具有签名intmain(intargc,char**argv);因此,您可以使用argc(正)和argv参数。argv数组保证包含argc+1元素。最后一个总是NULL。其他是非零、无别名的以零字节结尾的字符串。请注意,程序启动前的一些参数通常是:请参阅 例如,如果您键入(在Linux终端中)myprog-i a*.c-o foo.txt,并

所以,我可以让我的程序运行,但如果

$ ./a.out -f Text.txt

我只是不知道如何让程序建立-f表示文件的连接。执行此操作的逻辑是什么?

函数具有签名
intmain(intargc,char**argv)
;因此,您可以使用
argc
(正)和
argv
参数。
argv
数组保证包含
argc+1
元素。最后一个总是
NULL
。其他是非零、无别名的以零字节结尾的字符串。请注意,程序启动前的一些参数通常是:请参阅

例如,如果您键入(在Linux终端中)
myprog-i a*.c-o foo.txt
,并且如果您键入shell已(通过)
a*.c
扩展到
a1.c
a2.c
(因为只有这些文件的名称以
a
开头,并且在当前目录中有
.c
后缀),您的
myprog
可执行
main
程序被调用

  • argc==6
  • argv[0]
    包含
    “myprog”
    (因此您可以测试
    strcmp(argv[0],“myprog”)==0
  • argv[1]
    包含
    “-i”
  • argv[2]
    包含
    “a1.c”
  • argv[3]
    包含
    “a2.c”
  • argv[4]
    包含
    “-o”
  • argv[5]
    包含
    “foo.txt”
  • argv[6]
    NULL
    指针
此外,内核还保证(通过执行)所有6
argv
指针都是不同的、非重叠的

gnulibc让您可以解析这些参数:&。在POSIX中是标准化的(但GNU也提供了非常有用的功能)

我强烈建议您遵循:至少接受
--help
--version

例如,
-f
用于某些选项,而不是文件名这一事实通常是常规的(但请参见程序参数中使用
--
)。如果您确实想要一个名为
-f
的文件(这是一个非常糟糕的主意),请使用
/-f

有几枚炮弹爆炸了。您需要为此配置它们(甚至可以为您自己的程序配置它们)。

在C运行时中查找“getopt()”函数(“man getopt”,如果您在Unix机器上)。