我写了一个小程序,如果没有传递参数,则打印帮助信息。
如果我运行没有参数的应用程序
./myApp
打印
./myApp --filename=file
我知道argv [1]拥有第一个参数,但我无法弄清楚如何在“=”之后获取文本,即文件名。
答案 0 :(得分:2)
不应手动解析字符串,而应使用getopt()
或getopt_long()
。
他们为你做肮脏的工作并按照人们期望的方式行事(虽然自编的解析器有时令人困惑 - 有些人使用--arg value
,有些人使用--arg=value
,有些人甚至使用-arg value
})
答案 1 :(得分:0)
你必须自己解析它。 strtok
对此非常有用,另一个是strstr
。还有一些现成的库允许您将此功能导入到项目中,如果您不想自己编写,例如this one。
答案 2 :(得分:0)
strchr()
返回指向该字符的指针。接下来的字符是你想要的
char *equals;
equals = strchr(argv[1], '=');
if (equals) {
printf("Rest of argument: %s\n", equals + 1);
} else {
printf("No equal found in argv[1] (%s)\n", argv[1]);
}
根据您的具体需求,您可能希望将它们复制到某处或直接从argv [1]参数中使用它们。
答案 3 :(得分:0)
使用strchr-function查找'='字符。检查strchr返回值。如果返回值为非NULL,则将其递增1并且您拥有所需的值。
答案 4 :(得分:0)
不是自己解析这些东西,而是可以使用argp libc argument-parser:
答案 5 :(得分:0)
Argv中的字符串由空格分隔,因此您必须解析argv [1]字符串以在'='之后获取文本。但是,有些函数称为getopt()
和getopt_long()
,它们是POSIX标准的一部分。
如果您可以使用此功能,则可以使用getopt_long()
同时获取短选项和长选项(例如文件名)及其参数(例如文件)。
链接包括解释和示例: http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_22.html