2017-07-19 67 views
0

我真的很困惑指針和數組的使用。 我想從命令行傳遞一些值到數組。我需要使用該陣列進行其他處理。將char ** arr轉換爲char * arr []

int main(int argc, char *argv[]) 
{ 
    std::vector<const char *> args {}; 
    args.insert(args.end(), argv+1, argv + argc); 

    const char **arr = args.data(); 
} 

這工作,但不是我想要的,原來的代碼使用

const char *arr[] = {"some", "vaule", "here"}; 

我想傳遞arr中,而不是裏面的代碼分配的值。

我需要數組,但下面的代碼不起作用。

const char *arr[] = args.data(); 

所以我想保持我的數組,因爲其他處理,我該怎麼做呢? 謝謝!

+0

args變量應該用一個構造函數而不是{}來初始化,這就是我的mingw-g ++版本所說的 –

+0

你真的需要'std :: vector'構造的可能性非常小。此外,你不能「將事情傳遞給數組」。如果你想處理你的命令行參數 - 就這麼做;他們就在那裏。如果你想迭代它們,你可以考慮['gsl :: span '](https://www.quora.com/What-is-the-span-T-in-the-CppCoreGuidelines)。 – einpoklum

回答

0

你在這裏混淆了各種想法。

char * argv []是一個指向數組參數的指針,它們本身(因爲它們是c'字符串)是字符數組。因此argv是一個二維數組。

變量賦值像

const char *arr[] = args.data(); 

不起作用,只能用一個靜態列表像分配{「一些」,「vaule」,「這裏」}

爲了設置的值在arr內的值與argv相同,你需要循環argv並將字符串的值複製到arr中。

這可能會變得複雜,並且因爲您使用C++編寫代碼,所以您可能還需要使用向量。

在那裏你會做這樣的事情:

std::vector<std::string> arr(argv + 1, argv + argc); 

在這種情況下,你將不得不包含在

希望那是你問的什麼傳遞的參數值的向量。

+0

謝謝!我想我誤解了char * argv []。 – koma

0

char **arr實際上是同一類型char *argv[] 可以直接給它:

const char **arr = argv; 

編譯器可能會顯示警告信息,但它應該編譯。