默认的Argv参数类型

问题描述:

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

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

我以前通过argv + 1,它发送第一个参数,以及第二个参数,所以源和输出路径被包含在遍历路径中。

我只想源路径用于fts_open。

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

我只想抓住第一个参数并将其存储在char *中,然后创建一个NULL终止列表以传递给fts_open。

+0

像argv [1]和argv [2]? – vmpstr 2012-03-30 20:57:39

+0

是的,但是当我将argv [1]传递给fts_open时,它将argv [2]包含到它正在遍历的路径中。 – jarryd 2012-03-30 21:22:28

您需要副本问题的争论到一个新的列表,只包括该参数和最终的空指针

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]); }