2016-02-13 168 views
-1

如何將argv向量複製到新的向量中以修改它,然後將新參數傳遞給函數?對不起,如果這是一個基本的東西,我不是一個C++程序員。C++複製並修改argv []

int main(int argc, char *argv[]) 
{ 
    parseCommandLine(argc, argv); 

,並想:

int main(int argc, char *argv[]) 
{ 
    //Here copy argv[] to argv2[] and modify argv2[0] 

    parseCommandLine(argc, argv2); 
+1

你嘗試過什麼嗎?進行任何研究? –

+0

由於您似乎正在處理一個C++程序,現在是成爲C++程序員的好時機:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list祝你好運! – user2079303

+0

你是否需要修改參數本身,或只是他們的順序?目前還不清楚你需要在這裏改變。 – tadman

回答

1

如何複製的argv:

#include <iostream> 
#include <cstring> 

int main(int argc, char *argv[]) 
{ 
    char** argv2 = new char*[argc]; 

    for(int i=0; i<argc; ++i) 
    { 
     argv2[i] = new char[strlen(argv[i])+1]; 
     strcpy(argv2[i],argv[i]); 
    } 

    std::cout << argv2[0] << std::endl; 

    //do what you want with argv2 

    for(int i=0; i<argc; ++i) 
    { 
     delete [] argv2[i]; 
    } 

    delete [] argv2; 
    return 0; 
} 
+0

工作,非常感謝! – Jaume

3

如何變換的argv更多C++風格。見live demo

#include <iostream> 
#include <algorithm> 
#include <string> 
#include <vector> 


int main(int argc, char *argv[]) 
{ 
    std::vector<std::string> args(argc); 

    std::transform(argv, argv+argc, args.begin(), 
     [&](char*arg){ return std::string(arg); }); 

    std::cout << args[0]; 
}