2015-04-25 59 views
-2

我如何聲明和分配的2D陣列,而不每串預先知道多少個字符(char數組)將要在那裏? 舉例來說,這 -聲明和分配給二維字符指針

char** input = new char*(m*sizeof(char*)) //where m is input from terminal 

使無差錯

error: invalid conversion from ‘long unsigned int’ to ‘char*’ [-fpermissive] 

大廈上,我有一個函數,它接受一個char **作爲參數。我想知道通過這個指針存儲了多少個char數組。

int read2DArray(char* arr[]){ 
int l=0; 
while(arr[l][0]!='\0') l++; 
return l; 
} 

這是正確的嗎?

+0

你試過了嗎?結果是什麼? –

+0

多數民衆贊成在這個問題上,我不能嘗試它沒有正確宣佈它第一次。 – goelakash

+2

char * input = new char * [m * sizeof(char *)]' –

回答

2

這是正確的僅當取得的2D陣列的存在是足夠體貼與長度爲1的一維數組終止它,將含有單字符「\ 0」。

,如果你喜歡,你可以使用該公約。另一種方法是將數組的維度作爲附加參數傳遞。

至於聲明數組,使用括號沒有括號,而且你沒有提到的sizeof(任何) - 編譯器將採取大小的照顧。

char** input = new char*[m]; 

你,因爲你告訴編譯器創建一個新的char*米*的sizeof(字符*)得到了錯誤的信息。

+0

我無法傳遞大小參數,因爲我必須爲已編寫的驅動程序(如Topcoder)編寫函數。那麼檢查的一般方法是什麼? strlen的()?但是這也以'\ 0'作爲終結者。 – goelakash

+0

@goelakash:在這種情況下,您必須查閱該程序的文檔以查看其約定是什麼 - 或者檢查代碼以瞭解它如何構建陣列。猜測,我希望它終止char *爲NULL的char *數組,以及每個char爲'\ 0'的char數組。 – Beta