Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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_Parameters - Fatal编程技术网

C程序中的命令行参数?

C程序中的命令行参数?,c,parameters,C,Parameters,如何读取C中的命令行参数?例如,在 ./test --help 或 如何访问“-build”或“-help”?您的参数在argv中: int main(int argc, char **argv) 如果您打印argv的内容(argv[0]、argv[1]等),您就会明白这一点 尝试: int main(int argc,char**argv) { 对于(int i=0;i

如何读取C中的命令行参数?例如,在

./test --help


如何访问“-build”或“-help”?

您的参数在argv中:

int main(int argc, char **argv)
如果您打印argv的内容(argv[0]、argv[1]等),您就会明白这一点

尝试:

int main(int argc,char**argv)
{
对于(int i=0;i
最基本的方法是使用参数
(int argc,char*argv[])
,您可以直接解析这些参数


一个更高级的方法是使用getopt

您可以将
argc
argv
参数用于
main
函数,并根据它们执行不同的操作:

#include <string.h>
void dohelp(void) { /* whatever; */ }
void dobuild(void) { /* whatever; */ }
int main(int argc, char **argv) {
    if (argc == 2) {
        if (!strcmp(argv[1], "--help")) dohelp();
        if (!strcmp(argv[1], "--build")) dobuild();
    }
    return 0;
}

有几种方法可以[像往常一样]做到这一点。 命令行参数从argv读取(与argc一起传递到main)


您可以自己解析这些选项,并在每次在argv中找到新选项时设置位开关标志。也可以使用库来解析命令行参数。我建议使用libc-getopt(google-it)。

命令行参数是传递给程序并带有其名称的参数。例如,UNIX程序cp(复制两个文件)具有以下命令行参数:

cp源目的地

您可以使用
argc
argv
访问命令行参数:

int main(int argc, char *argv[])
{
    return 0;
}
argc是参数数,包括程序名,argv是包含参数的字符串数组
argv[0]
是程序名,
argv[argc]
保证为
NULL
指针

因此,
cp
程序可以这样实现:

int main(int argc, char *argv[])
{
    char *src = argv[1];
    char *dest = argv[2];

    cpy(dest, src);
}

它们不必命名为
argc
argv
;它们可以有您想要的任何名称,尽管传统上称之为。

如果strcmp返回true(例如,不匹配),则表示分段错误?有一个
在strcmp之前使其匹配谢谢!这正是我们需要的。虽然strcmp不需要包括stdio.h
/*rgaggghh*/
但不要犹豫。告诉我们你的真实想法。@Daniel:strcmp()的声明存在于
string.h
stdio.h
恰好包括
string.h
。同时包含
string.h
stdio.h
并没有什么坏处,但我会这么做。命令行参数是主函数的一部分。
int main(int foo, char **bar) /* RGAGGGGHH */
int main(int n, char **options) /* RGAGGGGHH */
int main(int argc, char *argv[])
{
    return 0;
}
int main(int argc, char *argv[])
{
    char *src = argv[1];
    char *dest = argv[2];

    cpy(dest, src);
}