繁体   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