2010-08-06 9 views
6

J'essaie de traduire un énorme projet de C++ en Delphi et je suis en train de finaliser la traduction. Une des choses que j'ai laissées est le monstre '\ 0'. Où ascmd est char *.Qu'est-ce que ' 0' en C++?

Je sais que \ 0 marque la fin du type de tableau en C++, mais j'ai besoin de le connaître comme un octet. Est-ce que c'est 0? En d'autres termes, le code ci-dessous serait-il l'équivalent de la ligne C++?

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

où asmcmd est PAnsiChar.

Vous n'avez pas besoin de connaître Delphi pour répondre à ma question, mais dites-moi \ 0 comme octet. Cela fonctionnerait aussi. :)

Répondre

13

'\0' est égal à 0. C'est une relique de C, qui n'a aucun type de chaîne et utilise plutôt des tableaux char. Le caractère nul est utilisé pour marquer la fin d'une chaîne; pas une décision très sage rétrospectivement - la plupart des autres implémentations de chaînes utilisent quelque part une variable de compteur dédiée, ce qui fait que l'on trouve la fin d'une chaîne O (1) au lieu de O de C (n).

*asmcmd=='\0' est juste une manière compliquée de vérifier length(asmcmd) == 0 ou asmcmd.is_empty() dans un langage hypothétique.

+3

Alambiqué, peut-être ... mais il est important de savoir quand vous ** devriez ** utiliser ''\ 0' '. Un exemple est 'pour (char * c = str; * c! = '\ 0'; C++)' vs 'pour (int i = 0; i David

+3

@David: "' * c! = '\ 0'' "pourquoi pas simplement' (char * c = str ; * c; C++) '? – SigTerm

+0

merci, cela diffère complètement de ce que je pensais que c'est. :) – qwerty101

3

C'est le caractère pour null ou char valeur 0. Il est utilisé à la fin de la chaîne.

+0

Donc, c'est 0 comme je pensais. Je vous remercie! – qwerty101

+0

non, cela signifie simplement "fin de chaîne". – Weboide

+2

'\ 0' n'est pas' null' mais 'NUL' :) Le premier est un pointeur, le dernier un caractère. – fredoverflow

5

Strictement, il s'agit d'une séquence d'échappement pour le caractère avec la valeur octale zéro (qui est bien sûr également nulle dans n'importe quelle base). Bien que vous puissiez utiliser n'importe quel nombre préfixé par zéro pour spécifier un code de caractère octal (par exemple, '\040' est un caractère espace dans le codage ASCII) vous auriez rarement jamais à le faire. '\ 0' est idiomatique pour spécifier un caractère NUL (parce que vous ne pouvez pas taper un tel caractère à partir du clavier ou l'afficher dans votre éditeur).

Vous pouvez également spécifier '\ x0', qui est un caractère NUL exprimé en hexadécimal.

Le caractère NUL est utilisé en C et C++ pour terminer une chaîne stockée dans un tableau de caractères. Cette représentation est utilisée pour les chaînes de caractères littérales et par convention pour les chaînes manipulées par la bibliothèque <cstring>/<string.h>. En C++, la classe std :: string peut être utilisée à la place.

Notez qu'en C++ une constante de caractère telle que '\0' ou 'a' a le type char. En C, pour des raisons peut-être obscures, il a le type int.

+0

J'aurais donné le +1 juste pour dire NUL au lieu de null, mais le reste était plutôt bon aussi ... –

Questions connexes