2014-03-05 56 views
-1


我試圖做到以下幾點:
給出CMD參數的程序,我想某些字符串從argv存儲到char**,但我是新來的C和我真的不確定如何去做,並不斷髮生分段錯誤。我該怎麼做?CMD參數轉換成char **在C


例子:
程序運行執行行「節目參數3 arg5」
現在我要救arg2arg5到一個新的String數組,讓我們把它叫做 StringFromArgs,它的一個char**
我也可以告訴大家,argv[1]argv[3]是我需要的, 的那些而且可以說我知道的StringsFromArgs最大容量爲3

我怎樣寫:

StringsFromArgs[0]=argv[1] 
StringsFromArgs[1]=argv[2] 
StringFromArgs[2]=NULL 

編輯 示例代碼

int main(int argc, char** argv){ 
char** stringsFromArgs; 
stringsFromArgs = malloc(3 * sizeof(char*)) ; 
int i;int k=0; 
for(i=1; i<argc; i++){ 
    if(argv[i]= somecondition){ 
     stringsFromArgs[k] = argv[i]; 
     k++; 
    } 
} 
//do something 
return 0; 
} 

* *編輯: 結束了使用你的答案解決它,謝謝!

+0

難道你StringsFromArgs malloc的空間? – Xufeng

+0

我有,它仍然不會出於某種原因... – Tai

+1

給更多的代碼。 – someuser

回答

0

最簡單的方法是::

int main(int argc, char** argv) 
{ 
char** StringsFromArgs ; 

StringsFromArgs = malloc(3 * sizeof(char*)) ; 
if(StringsFromArgs == NULL) 
{ 
    return -1 ; // ERROR allocating memory 
} 

StringsFromArgs[0]=argv[1] ; 
StringsFromArgs[1]=argv[3] ; 
StringFromArgs[2]=NULL ; 

free(StringsFromArgs) ; 
return 0 ; 
} 
+0

爲什麼自由的命令來到那裏?它會混淆用戶,如果意圖是要表明最終你必須釋放內存 – const

+0

當然,目的是顯示malloc的用法,最後,你必須釋放內存。 – Abhineet

+0

問題是我不知道哪個argv [i]我想要。我在循環中找到它們 – Tai

0

簡單的方法是:

int main(int argc, char** argv) 

    char* StringsFromArgs[] = {argv[1], argv[2], NULL} 

    //some work here 

    exit(0); 

} 

沒有看到一個理由使用malloc()可言。

+0

絕對。我寧願說,沒有必要將argv存儲在其他變量中,除非您打算修改它們,而我在OP問題中沒有看到它們。 – Abhineet

0

你可以嘗試像也

#include <assert.h> // assert() 
#include <stdlib.h> // malloc() and free() 

int main(int argc, char *argv[]) 
{ 
    int i = 0,k = 0; 

    if (argc > 1) 
    { 
     char **StringsFromArgs = malloc((argc - 1) * sizeof(char *)); 

     for(i=0;i<argc-1;i++) 
     { 
       if(strcmp(argv[i+1],"somestring")==0) 
       { 
       StringsFromArgs[k] = argv[i+1]; 
       printf("Argument%d:%s\n",i+1,StringsFromArgs[k]); 
       k++; 
       } 
     } 
    } 

    free(StringsFromArgs) ; 
    return 0; 
}