Frage

Ich möchte den GetVolumeInformations-Anruf verwenden, um den Namen eines entfernbaren Geräts abzurufen.Ich kann den Namen gut abrufen und in eine Tchar-Array-Variable SzvolnameBuff aufbewahren.Hier ist mein Code dafür:

generasacodicetagpre.

Wenn ich versuche, den Inhalt der Variablen mit der Zeile zu drucken:

generasacodicetagpre.

Ich erhalte einen Ausgang von "T" anstelle des Namens "Transcend", der der Name des Laufwerks ist.Ich habe es mit Visual Studio 2008 debuggen und herausfand, dass das Tchar-Array den Namen speichert: [0] 't' [1] 0 [2] 'r' [3] 0 [4] 'a' [5] 0 [6] 'n' [7] 0

und so weiter und so weiter.Warum das?Ich möchte, dass das Array das Wort speichert, um nur:

[0] 't' [1] 'r' [2] 'a' [3] 'n' [4] 's'

Um es später für die String-Verkettung zu verwenden.Gibt es eine Möglichkeit, dies zu beheben?

War es hilfreich?

Lösung

Es sieht so aus, als würden Sie die Unicode Win32-APIs verwenden.Sie sollten _tprintf verwenden, damit die entsprechende Funktion (Printf oder WPRINTF) entsprechend dem Zeichentyp verwendet wird.

Wenn Sie Unicode nicht kennen - hier ist ein kurzer Überblick.Der Grund, warum dies geschieht, ist, dass die Unicode für die regulären ASCII-Zeichen ein Nullbyte ist, gefolgt von dem ASCII-Zeichen.Deshalb sehen Sie die mit Nullgepolster gepolsterte Saite.

Beachten Sie, dass Sie bei Verwendung von TCHAR alle Saiten auch in das Makro _t () einwickeln sollen, so dass sie auch für den richtigen Typ deklariert werden.Wenn Sie diesem konsequent folgen, ist das Umwandeln von Unicode nach ANSI nur eine Frage des Änderns einer Präprozessorrichtlinie.

Andere Tipps

Das Warum verwenden Sie die Unicode-Versionen der Win32-APIs.

und es gibt 2 Korrekturen.Das erste ist, die Standardversionen der API zu verwenden, die, wenn Sie Visual Studio verwenden, durch Ändern des Zeichensatzes Ihres Projekts auf "NICHT SET" in Projekten-> Eigenschaften-> Konfigurationseigenschaften -> Allgemein-> Zeichensatz oderWenn Sie sicherstellen, dass Unicode nicht #Definiert ist, bevor Sie Windows.h einschließen, wenn Sie nicht vs.

verwenden.

Der zweite Fix, wie MDMA gesagt, soll die Unicode-Textmanipulationsfunktion WPRINTF verwenden oder% S in der Standardbibliothek verwenden.Dies ist der bevorzugte Fix, wenn Ihr Programm dann internationalisiert wird, und arbeiten Sie an, was die Dateinamen eingestellt hat.Es würde jedoch bedeuten, dass alle Down-Stream-Funktionen auch Unicode verwenden müssen, was in Abhängigkeit von der Größe des Projekts viel Arbeit bedeuten könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top