2012-01-10 26 views
6

我有一個標準的字符指針,即時嘗試投射到一個字符串。如何將char *轉換爲D中的字符串?

// string to char* 
char *x = cast(char*)("Hello World\0"); 

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

錯誤!

任何想法如何將char *轉換爲D中的字符串?

+5

pst:字符串文字已附加'\ 0' – 2012-01-10 23:38:21

+0

爲什麼如果通過胖指針已知長度?爲了兼容C? – 2012-01-11 15:06:07

+1

@Daevius,是的,這樣當你調用C函數時,你不必用toStringZ包裝所有的字符串文字。 – 2012-01-11 16:28:14

回答

14

使用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)是必要的。

+0

我認爲'len'應該是'size_t'類型。 – 2012-01-11 15:04:52