2012-03-30 113 views
0

什麼是默認的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

回答

1

您需要副本問題的爭論到一個新的列表,只包括該參數和最終的空指針

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

2

題目問題的直接答案是char **,但我認爲這對你來說不是很有幫助。

至少如果我理解正確的話,你要的是這樣的:

char *args[2]; 

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

fts_open(args); 
1

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