2012-01-10 8 views
6

私は文字列にキャストしようとしている標準の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 *をキャストする方法はありますか?

+5

pst:文字列リテラルに既に '\ 0'が追加されています –

+0

長さがすでに太字のポインタでわかっているのはなぜですか? C互換のために? –

+1

@Daevius、はい、このようにしてC関数を呼び出すと、すべての文字列リテラルをtoStringZでラップする必要はありません。 –

答えて

14

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); 
} 
3

あなたはこれを行うことができます。

+0

'len'は' size_t'型でなければならないと思います。 –

関連する問題