默认的argv数据类型是什么?
我想从cmd行中获取2个参数,并将这些参数传递给fts_open,并将返回值设置为fts_read。首先是源文件夹路径,第二个是输出文件路径。
我之前传递了argv + 1并且它发送了第一个参数以及第二个参数,因此源和输出路径被包含在遍历的路径中。
我只想要用于fts_open的源路径。
我知道fts_open采用NULL终止列表,我想从第一个参数源创建它。在考虑不同的数据类型之前,我有一些警告。
我只想获取第一个arg并将其存储在char *中,然后从此创建一个NULL终止列表以传递给fts_open。
答案 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);
}