Korrekte Verwendung von GetComputerName - muss ich auf reserve extra Raum für null-Zeichen
Ich Frage mich, was ist die korrekte Verwendung von GetComputerName. Sollte es
TCHAR computerName[1024 + 1];
DWORD size = 1024;
GetComputerName(computerName, &size);
oder
TCHAR computerName[1024];
DWORD size = 1024;
GetComputerName(computerName, &size);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Größe übergeben
lpnSize
parameter spiegelt sich der verfügbare Platz im Puffer, darunter Platz für den null-terminator. Entweder deiner Aussagen arbeiten, denn in der ersten du bist nur die Zuweisung einer byte mehr als das, was Sie sagen, ist verfügbar.Den Sie verwenden möchten, können
MAX_COMPUTERNAME_LENGTH
statt, die ist viel kleiner als 1024.DWORD size = MAX_COMPUTERNAME_LENGTH + 1;
aber das ist nur wiederholen Sie sich und ist anfällig für Fehler, wenn Sie sich entscheiden, ändern Sie die Größe des array höher.In der Dokumentation sagt ausdrücklich:
Dann:
Was bedeutet, dass Sie entweder:
MAX_COMPUTERNAME_LENGTH + 1
IMHO, die Sie ausprobieren können:
size
ist die Größe des Puffers (bei der Eingabe), nicht die Länge der Zeichenfolge. Bei der Ausgabe ist es die Länge der Zeichenfolge. Deine zweite version ist korrekt. Der erste verletzt, obwohl. Aber bitte denken Sie über MAX_COMPUTERNAME_LENGTH anstelle einer hartcodierten Wert.