将wstring强制转换为wchar*的正确方法是什么?(或字符串到char*)

Woo*_*und 7 d

[我是D的新手(目前正在编写我的第一个有用的程序),我没有太多的C背景 - 只有一些C#和其他主要是无指针的语言.

在转换之前,我是否需要始终将'\ 0'附加到wstring?这是确保我的wchar*将以null结尾的唯一方法吗?当它被转换时,它是wstring的新副本,还是只是获得指向您正在投射的相同wstring的指针?

Pet*_*der 9

这些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.


Tra*_*s3r 9

要调用Windows*W函数,请使用http://www.digitalmars.com/d/2.0/phobos/std_utf.html#toUTF16z

另请注意,字符串文字已经以0结尾,因此您可以直接传递它们.


Ber*_*ard 8

如果你只想要一个指针,正确的方法是使用'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终止,则不会执行副本.