如何在D语言中将char*转换为字符串?

9
我有一个标准的char指针,我想将它转换为字符串。
// string to char*
char *x = cast(char*)("Hello World\0");

// char* to string?
string x = cast(string)x;
string x = cast(immutable(char)[])x;

错误!

有什么办法可以在D中将char*转换为字符串?


5
pst: 字符串字面量已经附加了\0 - ratchet freak
为什么通过fat指针已知长度还需要C兼容性呢? - Taco de Wolff
1
@Daevius,是的,这样当您调用C函数时,您不必使用toStringZ包装所有字符串文字。 - he_the_great
2个回答

17

使用 std.conv.tochar* 转换为 string。 使用 std.string.toStringZ 反向转换。

import std.string;
import std.stdio;
import std.conv;

void main()
{
    immutable(char)* x = "Hello World".toStringz();
    auto s = to!string(x);
    writeln(s);
}

3

如果您知道确切的长度,可以这样做:

immutable(char)* cptr = obj.SomeSource();
int len = obj.SomeLength();

string str = cptr[0..len];

在某些情况下(例如字符串包含\0),这是必要的。

我认为len应该是size_t类型。 - Taco de Wolff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接