如何获取特定字符后的所有文本?

时间:2011-10-04 09:11:19

标签: c

我写了一个小程序,如果没有传递参数,则打印帮助信息。

如果我运行没有参数的应用程序

./myApp 

打印

./myApp --filename=file

我知道argv [1]拥有第一个参数,但我无法弄清楚如何在“=”之后获取文本,即文件名。

6 个答案:

答案 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:

http://www.gnu.org/s/hello/manual/libc/Argp.html

答案 5 :(得分:0)

Argv中的字符串由空格分隔,因此您必须解析argv [1]字符串以在'='之后获取文本。但是,有些函数称为getopt()getopt_long(),它们是POSIX标准的一部分。

如果您可以使用此功能,则可以使用getopt_long()同时获取短选项和长选项(例如文件名)及其参数(例如文件)。

链接包括解释和示例: http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_22.html