默认的Argv参数类型
问题描述:
什么是默认的argv数据类型?默认的Argv参数类型
我想从cmd行抓取2个参数,并将这些参数传递给fts_open,返回值设置为fts_read。第一个是源文件夹路径,第二个是输出文件路径。
我以前通过argv + 1,它发送第一个参数,以及第二个参数,所以源和输出路径被包含在遍历路径中。
我只想源路径用于fts_open。
我知道fts_open采用NULL终止列表,我想从第一个参数,源创建此。关于不同的数据类型之前,我有一些警告。
我只想抓住第一个参数并将其存储在char *中,然后创建一个NULL终止列表以传递给fts_open。
答
您需要副本问题的争论到一个新的列表,只包括该参数和最终的空指针
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);
}
+0
这工作谢谢你。 – jarryd 2012-03-30 22:08:39
答
题目问题的直接答案是char **
,但我认为这对你来说不是很有帮助。
至少如果我理解正确的话,你要的是这样的:
char *args[2];
args[0] = argv+1;
args[1] = NULL;
fts_open(args);
答
如果您main
函数签名(int, char**)
,那么第二个参数是指向的一个空结束的第一要素数组char*
,其中每个数组本身都是指向代表程序参数字符串的空终止数组char
的第一个元素的指针。
您可以打印出来是这样的:
for (char ** p = argv; *p; ++p)
{
printf("Argument: %s\n", *p);
}
或者,从后面打印出来:
while (argc--) { printf("Argument %i: %s\n", argc, argv[argc]); }
像argv [1]和argv [2]? – vmpstr 2012-03-30 20:57:39
是的,但是当我将argv [1]传递给fts_open时,它将argv [2]包含到它正在遍历的路径中。 – jarryd 2012-03-30 21:22:28