Как привести символ * к строке в D? - PullRequest
6 голосов
/ 11 января 2012

У меня есть стандартный указатель на символ, который я пытаюсь привести к строке.

// 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?

Ответы [ 2 ]

14 голосов
/ 11 января 2012

Используйте std.conv.to для преобразования из char* в 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 голосов
/ 11 января 2012

Если вы знаете точную длину, вы можете сделать это:

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

string str = cptr[0..len];

В некоторых случаях (например, если строка содержит \0), что необходимо.

...