[我是D的新手(目前正在编写我的第一个有用的程序),我没有太多的C背景 - 只有一些C#和其他主要是无指针的语言.
在转换之前,我是否需要始终将'\ 0'附加到wstring?这是确保我的wchar*将以null结尾的唯一方法吗?当它被转换时,它是wstring的新副本,还是只是获得指向您正在投射的相同wstring的指针?
这些toStringz函数将D字符串转换为C样式的零终止字符串.
immutable(char)* toStringz(const(char)[] s);
immutable(char)* toStringz(string s);
Run Code Online (Sandbox Code Playgroud)
例如
string s;
immutable(char)* cstr = s.toStringz();
//or: toStringz(s);
Run Code Online (Sandbox Code Playgroud)
toStringz仅当字符串尚未终止时才在堆上分配新字符串,否则它只返回s.ptr.
要调用Windows*W函数,请使用http://www.digitalmars.com/d/2.0/phobos/std_utf.html#toUTF16z
另请注意,字符串文字已经以0结尾,因此您可以直接传递它们.
如果你只想要一个指针,正确的方法是使用'ptr'属性(可用于所有动态数组,而不仅仅是字符串)
str.ptr
Run Code Online (Sandbox Code Playgroud)
但是,如果您想要使用C语言,以确保它是nul-terminated,请使用 toStringz
import std.string;
toStringz(str);
Run Code Online (Sandbox Code Playgroud)
toStringz 如果字符串已经nul终止,则不会执行副本.
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |