我有一個標準的字符指針,即時嘗試投射到一個字符串。如何將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中的字符串?
我有一個標準的字符指針,即時嘗試投射到一個字符串。如何將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中的字符串?
使用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);
}
如果你知道確切的長度,你可以這樣做:
immutable(char)* cptr = obj.SomeSource();
int len = obj.SomeLength();
string str = cptr[0..len];
對於某些情況下(例如,如果字符串包含\0
)是必要的。
我認爲'len'應該是'size_t'類型。 – 2012-01-11 15:04:52
pst:字符串文字已附加'\ 0' – 2012-01-10 23:38:21
爲什麼如果通過胖指針已知長度?爲了兼容C? – 2012-01-11 15:06:07
@Daevius,是的,這樣當你調用C函數時,你不必用toStringZ包裝所有的字符串文字。 – 2012-01-11 16:28:14