簡體   English   中英

D樣式數組到C樣式數組

[英]D Style Arrays to C Style Arrays

我正在D中創建一個Window,並且CreateWindowA函數需要指向字符(基本上是C字符數組)的指針。

如何將D樣式數組( char[] )轉換為C樣式數組( char* )?

通常std.string.toStringz的兩個函數是std.string.toStringzstd.utf.toUTFz

toStringz會將string轉換為immutable(char)* ,您可以將其傳遞給采用const char*的C函數。 如果它可以確定string以null終止(通常只有字符串文字,這種情況的末尾有一個null終止符),則它不會分配,而只會使用stringptr屬性,但在大多數情況下,它將分配。

toUTFz將從任何字符串類型轉換為任何字符指針類型。 由於Windows的所有W函數都采用UTF-16,因此它可能最常用於Windows的const(wchar)*轉換,但是它也可以用於轉換為char* -例如str.toUTFz!(char*)() toStringz一樣,如果它可以確定不必要,它將嘗試不分配,但幾乎總是必需的。

現在,對於您的特殊情況,您嘗試使用Windows中的A函數之一。 這幾乎總是一個壞主意,我強烈建議不要這樣做。 使用toUTFz將您的string轉換為const(wchar)*並將其傳遞給CreateWindowW AFAIK, A函數的唯一優點是它們可與Win2K之前的版本一起使用。 關於他們的其他一切都更糟。 但是,如果由於某種原因堅持使用A函數,則將不得不使用std.windows.charset.toMBSz ,因為A函數使用的不是UTF-8,而是使用“ Windows 8-位字符集”和toMBSz會將字符串轉換為該格式。

您可以獲取D數組的ptr字段。 length字段來獲取長度

但是,如果需要C樣式的字符串,則需要toStringz方法,該方法將添加空終止符並將指針返回第一個字符。 k EEP一個它的參考,如果API不創建它自己的拷貝操作,以避免由GC懸擺指針

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM