2013-07-10 185 views
0

我有一個函數,它將const ** char作爲函數參數。我必須調用這個函數的輸入是一個字符串,我需要將它轉換爲const char **,其中每一行都是字符串的單個字符。C++轉換2維char數組const char **

「串」=> { 「S」, 「T」, 「R」, 「I」, 「N」, 「G」}

我能夠創建一個char * *與上述數據,但將其轉換爲const char **我無法做到。編譯器顯然出錯了。然後我創建了一個2維字符數組char input [string.size()] [2]。但有了這個我在失去了如何將它轉換爲const char **

UPDATE:此做了什麼,我一直在尋找 - (爲const char **)temp其中溫度是char [大小] [2]

回答

0

你可以嘗試使用const_cast指針的類型。

int main(int ac, char **av) 
{ 
const char **const_av = const_cast<const char **>(av); 

return 0; 
} 
0

如果我理解正確的,你有一個char**(從 一個char *[]?派生),並且要爲其指定一個char const**或 用它來初始化char**。這是非法的,因爲它會 突破常量:

char const s[] = "abc"; 
char const** p = s; 
char** q = p;   // illegal without const_cast 
char* ps = *q;   // because it allows this 
*ps = 'x'; 

你應該問自己什麼是真正的const在這裏。如果你 處理字符串文字,而不是:

char* s[] = { "abc", "123", "xyz" }; 

你可能想:

char const* s[] = { "abc", "123", "xyz" }; 

甚至:

char const* const s[] = { "abc", "123", "xyz" }; 

或者,也許是功能應採取char const* const* (如果它沒有修改)。隱含地,char**將轉換爲 。

最後,如果它是一個傳統的功能,其簽名不能 修改,但實際上並沒有做任何修改,就可以使用 const_cast強制編譯器接受它。

+0

我無法修改簽名。但是,這做了我正在尋找 - (const char **)temp temp是char [size] [2] – Jithin