私は文字列にキャストしようとしている標準のcharポインタを持っています。Dの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 *をキャストする方法はありますか?
私は文字列にキャストしようとしている標準のcharポインタを持っています。Dの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 *をキャストする方法はありますか?
std.conv.to
を使用してchar*
からstring
に変換してください。逆の場合はstd.string.toStringZ
を使用してください。必要とされている(文字列が\0
が含まれている場合など)いくつかのケースについて
immutable(char)* cptr = obj.SomeSource();
int len = obj.SomeLength();
string str = cptr[0..len];
:あなたが正確な長さをわかっている場合
import std.string;
import std.stdio;
import std.conv;
void main()
{
immutable(char)* x = "Hello World".toStringz();
auto s = to!string(x);
writeln(s);
}
あなたはこれを行うことができます。
'len'は' size_t'型でなければならないと思います。 –
pst:文字列リテラルに既に '\ 0'が追加されています –
長さがすでに太字のポインタでわかっているのはなぜですか? C互換のために? –
@Daevius、はい、このようにしてC関数を呼び出すと、すべての文字列リテラルをtoStringZでラップする必要はありません。 –