2012-01-10 24 views
6

Dizeye yayınlamaya çalıştığım standart bir char işaretçim var.D dilinde dize bir char * nasıl yazılır?

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

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

Hata!

D biçimindeki bir dizgiye char * nasıl dönüştürüleceği hakkında herhangi bir fikir var mı?

+5

pst: dize değişmezleri zaten eklenmiş "\ 0" –

+0

Neden uzunluk şişman işaretçisiyle biliniyorsa? C uyumluluğu için mi? –

+1

@Daevius, Evet, bu şekilde, bir C işlevine çağrı yaptığınızda, tüm dize değişmezlerinizi toStringZ ile sarmanız gerekmez. –

cevap

14

std.conv.to kullanın, char* - string. Diğer yoldan gitmek için std.string.toStringZ kullanın.

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

sen bunu yapabilirsin tam uzunluğunu biliyorsanız: Bazı durumlarda

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

string str = cptr[0..len]; 

gerekli olduğunu (string \0 içeriyorsa olduğu gibi).

+0

Sanırım 'len ',' size_t' türünde olmalıdır. –

İlgili konular