2010-08-06 1 views
6

Ich versuche ein riesiges Projekt von C++ nach Delphi zu übersetzen und fertige die Übersetzung an. Eines der Dinge, die ich verlassen habe, ist das Monster "\ 0".Was ist ' 0' in C++?

if (*asmcmd=='\0' || *asmcmd==';') 

wo asmcmd ist char *.

Ich weiß, dass \ 0 das Ende des Array-Typs in C++ markiert, aber ich muss es als ein Byte kennen. Ist es 0?

Mit anderen Worten, würde der folgende Code das Äquivalent der C++ - Zeile sein?

if(asmcmd^=0) or (asmcmd^=';') then ... 

wo asmcmd PAnsiChar ist.

Sie müssen Delphi nicht kennen, um meine Frage zu beantworten, aber sagen Sie mir \ 0 als Byte. Das würde auch funktionieren. :)

Antwort

13

'\0' entspricht 0. Es ist eine Reliquie von C, die überhaupt keinen String-Typ hat und char-Arrays verwendet. Das Nullzeichen wird verwendet, um das Ende einer Zeichenfolge zu markieren. im nachhinein keine sehr weise Entscheidung - die meisten anderen String-Implementierungen verwenden irgendwo eine dedizierte Counter-Variable, die das Finden des Endes einer Zeichenkette O (1) anstelle von Cs O (n) macht.

*asmcmd=='\0' ist nur eine verschachtelte Art der Überprüfung oder asmcmd.is_empty() in einer hypothetischen Sprache.

+3

Konvolut, vielleicht ... aber es ist wichtig zu wissen, wann du ** '\ 0'' verwenden sollst. Ein Beispiel ist 'für (char * c = str; * c! = '\ 0'; C++)' vs 'für (int i = 0; i David

+3

@David: "' * c! = '\ 0'' "Warum nicht einfach' (char * c = str ; * c; C++) '? – SigTerm

+0

danke, das unterscheidet sich komplett von dem, was ich dachte, es ist. :) – qwerty101

3

Das ist die Char für null oder char Wert 0. Es wird am Ende der Zeichenfolge verwendet.

+0

So ist es 0, wie ich dachte. Vielen Dank! – qwerty101

+0

Nein, es bedeutet nur "Ende der Zeichenfolge". – Weboide

+2

'\ 0' ist nicht' null' sondern 'NUL' :) Ersteres ist ein Zeiger, letzteres ein Zeichen. – fredoverflow

5

Genau genommen ist es eine Escape-Sequenz für das Zeichen mit dem oktalen Wert Null (der natürlich in jeder Basis auch Null ist).

Obwohl Sie eine beliebige Zahl mit dem Präfix Null verwenden können, um einen oktalen Zeichencode anzugeben (z. B. '\040' ist ein Leerzeichen in ASCII-Codierung), hätten Sie nur selten einen Grund dafür. '\ 0' ist idiomatisch für die Angabe eines NUL-Zeichens (weil Sie ein solches Zeichen nicht über die Tastatur eingeben oder in Ihrem Editor anzeigen können).

Sie könnten auch '\ x0' angeben, was ein NUL-Zeichen ist, das in Hexadezimalzahlen ausgedrückt wird.

Das NUL-Zeichen wird in C und C++ verwendet, um eine Zeichenfolge zu beenden, die in einem Zeichenarray gespeichert ist. Diese Darstellung wird für Literalzeichenfolgenkonstanten und Konvention für Zeichenfolgen verwendet, die von der <cstring>/<string.h>-Bibliothek bearbeitet werden. In C++ kann stattdessen die Klasse std :: string verwendet werden.

Beachten Sie, dass in C++ eine Zeichenkonstante wie '\0' oder 'a' den Typ char hat. In C, aus vielleicht obskuren Gründen, hat es Typ int.

+0

Ich hätte die +1 gegeben, nur weil ich NUL anstelle von null gesagt habe, aber der Rest war auch ziemlich gut ... –