2017-04-25 6 views
1

私は文字列にバッファを変換しようとしていますが、どうやら私は
どのように私はこのスペースを削除し、あなたがスライスする必要がある文字列のコンテナdlang char []を文字列に変換してトリムする方法は?

string getClass(HWND hwnd=NULL){ 
    char[100] str; 
    GetClassNameA(hwnd, str.ptr, str.length); 
    writeln(str.dup.strip,'"'); //nothing is stripped, str is printed as 100 characters 
    writeln(str[99]=='\0'); //false 
    writeln(str[99]==' '); //false 
    writeln(str.dup[99]=='\0'); //false 
    writeln(str.dup[99]==' '); //false 
    writeln(str.dup.strip[99]=='\0'); //false 
    writeln(str.dup.strip[99]==' '); //false 
    return to!string(str).strip; //same nothing is stripped 
} 

答えて

3

に[]文字を変換する必要がありますを削除することはできません。この空間があります正しい長さのバッファ。 GetClassNameは文字列の長さを返します。

char[100] buffer; 
auto recv = GetClassNameA(hwnd, buffer.ptr, buffer.length); 
if(recv == 0) throw new Exception("failed"); 
char[] str = buffer[0 .. recv]; 
// now you can work with str 
+0

ありがとうございます。 GetClassNameが長さを返すのは幸運です。 – shuji

+0

これはまさにこのような使い方のためのものです。 –

+1

もしそうでなければ、ゼロ終端文字( 'strlen'関数)の文字列をスキャンし、そのbtwでスライスすることもできます。 –

関連する問題