2012-03-30 23 views
0

デフォルトのargvデータ型は何ですか?デフォルトのArgv引数型

私は、cmd行から2つの引数を取得し、これらの引数をfts_openに渡し、戻り値をfts_readに設定したいとします。最初はソースフォルダパス、2番目は出力ファイルパスです。

以前はargv + 1を渡していましたが、第1引数と第2引数を送信したので、ソースと出力パスがパスするパスに含まれていました。

私は、fts_openに使用するソースパスのみが必要です。

私はfts_openがNULLで終わるリストを取ることを知っています。私は最初の引数であるソースから作成したいと思います。私はいくつかのデータ型について前にいくつかの警告を出しました。

最初の引数をつかんでchar *に格納し、それからNULL終端リストを作成してfts_openに渡したいだけです。

+0

argv [1]とargv [2]のようなものですか? – vmpstr

+0

はい、しかし、私がargv [1]をfts_openに渡したとき、argv [2]はそれが通過していたパスに含まれていました。 – jarryd

答えて

1

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

あるいは、バックからそれらを印刷しますその引数と最終的な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); 
} 
+0

これはあなたに感謝しました。 – jarryd

2

タイトルの質問への直接の回答はchar **ですが、実際にはそれはあなたにとって大きな助けとは言えません。あなたのmain関数が署名(int, char**)を持っている場合は、2番目の引数がnullで終わるの最初の要素へのポインタが

char *args[2]; 

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

fts_open(args); 
1

です:私が正しく理解していれば

は、少なくとも、あなたが欲しいのはこのようなものですchar*の配列であり、そのそれぞれはプログラム引数文字列を表すcharのヌル終端配列の最初の要素へのポインタです。

あなたはこのようにそれらを印刷することができます唯一の新しいリストに質問にあなたはコピーに引数を必要とする

while (argc--) { printf("Argument %i: %s\n", argc, argv[argc]); } 
関連する問題