2011-01-10 5 views
1

ich auf ein Stück Code arbeite, die wie nachstehend eine Erklärung hat:if (memcmp (Version, " x0 x0 x0", 3) == 0)

if (memcmp (version, "\x0\x0\x0", 3) == 0)  

Was die Daten das wird mit der version verglichen? Ist es das gleiche wie mit "000" zu vergleichen?

+1

Randnotiz: In diesem speziellen Fall ist jedes "x" unnötig. – Mehrdad

Antwort

-1

Nr. \ x0 ist das Literal für NULL. "000" ist eine Zahl und hat eine andere Darstellung im Speicher.

+2

'\ x0' (oder' \ 0') ist das Literal für das NUL-Zeichen. NULL (mit zwei Ls) ist normalerweise für den Zeiger reserviert. –

+1

'" 000 "' ist keine Zahl - es ist eine Zeichenkette. – mizo

6

Nein, es ist nicht dasselbe wie "000". Es vergleicht drei null (0) Bytes. Jedes Byte ist ein binärer Wert von Null. Dies ist anders als "000", das ist eine Zeichenfolge für die druckbare Zeichen ASCII-Werte enthält0, die 48 (oder 30 in hex.)

So "000" die gleichen wie "\x30\x30\x30" wären.

1

Nein - es ist nicht dasselbe wie der Vergleich mit "000". Es wird gegen drei Nullzeichen verglichen. Eine äquivalente und wahrscheinlich mehr erwartete Zeichenfolge wäre "\0\0\0". Oder nur ein 3-stelliges Array gefüllt mit 0, für diesen Fall, wo der Code sowieso nur 3 Zeichen überprüft.

+1

Wenn Sie knifflig sein wollten, könnten Sie '" \ 0 \ 0 "' (und 'sizeof" \ 0 \ 0 "' für die Größe verwenden). –

4

"\x0\x0\x0" entspricht { 0x00, 0x00, 0x00, 0x00 }. Die vierte Null ist der String-Null-Terminator.

Also, um Ihre Frage zu beantworten - nein, es ist nicht das Gleiche wie im Vergleich mit "000".

'\x0' ist hexadezimal null, während '0' der ASCII-Code des Zeichens 0 (hexadezimal 30) ist.

1

\x0 steht für eine char mit Wert 0. 0 ist anders, es ist das ASCII-Zeichen mit Code 0x30.

0

Es wäre interessant, die Definition der Variablen version zu kennen. Ist es ein void * oder ein char * oder ein anderes seltsames Casting. Dies ist wahrscheinlich eine Warnung während des Kompilierens.

Es wäre auch ratsam zu sehen, wie version initialisiert wird, nur um sicherzustellen, dass es keine Fehler gibt. Es ist sicherlich eine seltsame Art, nach der fehlenden Versionsnummer in einem Programm zu suchen.

Verwandte Themen