默认的Argv参数类型

时间:2012-03-30 20:55:55

标签: c full-text-search

默认的argv数据类型是什么?

我想从cmd行中获取2个参数,并将这些参数传递给fts_open,并将返回值设置为fts_read。首先是源文件夹路径,第二个是输出文件路径。

我之前传递了argv + 1并且它发送了第一个参数以及第二个参数,因此源和输出路径被包含在遍历的路径中。

我只想要用于fts_open的源路径。

我知道fts_open采用NULL终止列表,我想从第一个参数源创建它。在考虑不同的数据类型之前,我有一些警告。

我只想获取第一个arg并将其存储在char *中,然后从此创建一个NULL终止列表以传递给fts_open。

3 个答案:

答案 0 :(得分:2)

标题问题的直接答案是char **,但我认为这对你没什么帮助。

至少如果我理解正确,你想要的是这样的:

char *args[2];

args[0] = argv+1;
args[1] = NULL;

fts_open(args);

答案 1 :(得分:1)

如果你的main函数有签名(int, char**),那么第二个参数是指向空终止数组char*的第一个元素的指针,每个数组本身都是一个指针到{null}终止的char数组的第一个元素,表示程序参数字符串。

您可以这样打印:

for (char ** p = argv; *p; ++p)
{
    printf("Argument: %s\n", *p);
}

或者,从后面打印它们:

while (argc--) { printf("Argument %i: %s\n", argc, argv[argc]); }

答案 2 :(得分:1)

您需要相关参数复制到仅包含该参数和最终NULL指针的新列表

int main(int argc, char **argv) {
    if (argc < 2) /* error */;
    char **copy = malloc(2 * sizeof *copy);
    copy[0] = malloc(strlen(argv[1]) + 1);
    if (!copy[0]) /* error */;
    strcpy(copy[0], argv[1]);
    copy[1] = NULL;

    whatever(copy/*, ... */);

    /* ... */

    free(copy[0]);
    free(copy);
}
相关问题