2009-06-15 68 views
6

我想在Managed C++中編寫一個應用程序,但我無法弄清楚如何聲明一個字符串數組。Managed C++中字符串的數組

String^linet [];

拋出一個錯誤

「系統:字符串^」:本地陣列無法容納這種管理類型

所以我想有一個不同的方式來進行管理的數據做類型。究竟是什麼?

+0

只是有點雞蛋裏挑骨頭:雖然託管C++和C++/CLI會就我所知,被編譯成相同的代碼,它們實際上是兩種不同的語言。 – 2016-06-14 21:38:50

回答

7

你真的指託管C++嗎?不是C++/CLI?

假設你實際上是用C++/CLI(因爲您發佈的錯誤消息),有兩種方法可以做到這一點:

將創建一個管理的陣列,即同一類型的字符串[]在C#中。

gcroot<String^>[] unmanagedArray; 

將創建一個託管C++陣列(我從來沒有真正使用數組嘗試這樣做 - 它與STL容器效果很好,所以應該在這裏工作,太)。

+1

當調用String-> Split()(字符串版本數組)時,該工作如何? – 2012-11-12 19:34:51

+0

@ user645280 - array ^sa = str-> Split(gcnew array {「one」,「two」},StringSplitOptions :: None); 使用spit字符串時,您需要指定StringSplitOptions。 – erict 2018-03-03 18:08:20

4

http://www.codeproject.com/KB/mcpp/cppcliarrays.aspx

這應該有你需要的:)

與託管C工作時,所有的答案++(亦稱C++/CLI亦稱C++/CLR),你需要考慮你的變量類型的一切你做。任何「託管」類型(基本上都是從System :: Object派生的所有內容)只能用於託管上下文中。一個標準的C++數組基本上在堆上創建了一個固定大小的內存塊,使用sizeof(type)x NumberOfItems個字節,然後遍歷它。託管類型不能保證在原來的堆上保留原來的位置,這就是爲什麼你不能這樣做:)

1

您使用.Net的集合類。對於example

List<String^>^ dinosaurs = gcnew List<String^>();