2011-07-12 34 views
0

我想傳遞一個字符指針數組作爲由C測試驅動器到C輸入++函數(在C包裝提供)獲取作爲輸入到C++函數傳遞的字符*數組的大小

char* LowerList[10]; 
LowerList[0]="abc"; 
LowerList[1]="def"; 
LowerList[2]="hij"; 

當可在C++側的元件的顯示值被顯示爲

char* LowerList[0]="abc"; 
LowerList[1]="def"; 
LowerList[2]="hij"; 
LowerList[3]=ƒì¶S<\$ UV<35?Ä@ 
LowerList[34]=ƒ<bad pointer> 

我需要傳遞給C++尺寸數組,我可以使用 而已經得到的尺寸(LowerList [計數]),但由於垃圾價值而無法這樣做。 請讓我知道,如果有任何方法我可以通過初始化,內存分配或將其轉換爲向量來找到正確大小的char * LowerList []。

更正上面的代碼爲錯字錯誤

下面是我的一些給我到目前爲止的建議意見:

1)傳遞數組的大小作爲一個參數作爲受過良好的限制對於我的場景.2)轉換到矢量需要的大小可用3)哨兵值我需要添加的位置。正如前面所述,我試圖處理一個場景,其中用戶傳遞值爲3導致失敗。我沒有任何控制權限C用戶使用C測試驅動程序來限制我的C++包裝。

回答

1

如果我沒有弄錯,指針LowerList[3]LowerList[9]都是未初始化的。你總是可以只使用NULL作爲一個哨兵值,要麼明確指定,或做這樣的事情:

char* LowerList[10] = { "abc", "def", "hij" }; 

這應該初始化數組中的其餘指針爲NULL。


在回答你的第二個評論:

#define LOWER_LIST_SIZE 10 
#define MINIMUM_SIZE 2 

#if LOWER_LIST_SIZE < MINIMUM_SIZE 
    #error "LOWER_LIST_SIZE must be >= MINIMUM_SIZE" 
#endif 

char *LowerList[LOWER_LIST_SIZE] = // etc. 

或類似的東西。

http://en.wikipedia.org/wiki/C_preprocessor#User-defined_compilation_errors_and_warnings

+0

謝謝你的回答。我已經得到了這個初始化的正確大小。 – Abhilash

+0

還有一點..有一種方法,我可以在我的C測試驅動程序中初始化char * LowerList [10],而不指定大小爲10,因爲訪問C++函數的C包裝中的代碼存在訪問衝突錯誤,如果大小小於例2。原因是爲了讓我的C測試驅動程序萬無一失,因爲即使大小爲2的C測試驅動程序編譯也是成功的,但在執行它時失敗。 – Abhilash

+0

@Abhilash:看到我更新的答案。 – JAB

1

此外,給出你的初始化是完全錯誤的。您有:

char* LowerList[10]; 
char* LowerList[0]="abc"; 
char* LowerList[1]="def"; 
char* LowerList[2]="hij"; 

你想要的是:

char* LowerList[10]; 
LowerList[0]="abc"; 
LowerList[1]="def"; 
LowerList[2]="hij"; 

或申訴委員會有替代品。你的版本問題在於你基本上聲明瞭4次LowerList,但是你不能那樣做。

+0

嘿,不知何故,我完全錯過了。 – JAB

相關問題