2010-08-06 25 views
6

Estoy tratando de traducir un gran proyecto de C++ a Delphi y estoy finalizando la traducción. Una de las cosas que dejé es el monstruo '\ 0'.¿Qué es ' 0' en C++?

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

donde asmcmd es char *.

Sé que \ 0 marca el final del tipo de matriz en C++, pero necesito saberlo como un byte. ¿Es 0?

En otras palabras, ¿sería el código siguiente el equivalente de la línea C++?

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

donde asmcmd es PAnsiChar.

No necesita saber Delphi para responder mi pregunta, pero dígame \ 0 como byte. Eso funcionaría también. :)

Respuesta

13

'\0' es igual a 0. Es una reliquia de C, que no tiene ningún tipo de cadena y usa matrices de caracteres en su lugar. El carácter nulo se usa para marcar el final de una cadena; no es una decisión muy sabia en retrospectiva: la mayoría de las otras implementaciones de cadenas utilizan una variable de contador dedicada en alguna parte, lo que hace que encontrar el final de una cadena O (1) en lugar de C sea O (n).

*asmcmd=='\0' es una forma enrevesada de comprobar length(asmcmd) == 0 o asmcmd.is_empty() en un lenguaje hipotético.

+3

Enrevesado, quizás ... pero es importante saber cuándo ** debes ** usar ''\ 0''. Un ejemplo es 'for (char * c = str; * c! = '\ 0'; C++)' contra 'for (int i = 0; i David

+3

@David: "' * c! = '\ 0'' "¿por qué no simplemente' (char * c = str ; * c; C++) '? – SigTerm

+0

gracias, esto difiere completamente de lo que pensé que era. :) – qwerty101

3

que es el char para null o char valor 0. Se usa al final de la cadena.

+0

Así que es 0 como yo pensaba. ¡Gracias! – qwerty101

+0

no, solo significa "fin de cadena". – Weboide

+2

'\ 0' no es' null' sino 'NUL' :) El primero es un puntero, el último un personaje. – fredoverflow

5

Estrictamente es una secuencia de escape para el personaje con el valor octal cero (que por supuesto también es cero en cualquier base).

Aunque puede usar cualquier número con el prefijo cero para especificar un código de carácter octal (por ejemplo, '\040' es un carácter de espacio en codificación ASCII), casi nunca tendría motivo para hacerlo. '\ 0' es idiomático para especificar un carácter NUL (porque no puede escribir dicho carácter desde el teclado o mostrarlo en su editor).

También podría especificar '\ x0', que es un carácter NUL expresado en hexadecimal.

El carácter NUL se usa en C y C++ para terminar una cadena almacenada en una matriz de caracteres. Esta representación se utiliza para las constantes de cadena literales y, por convención, para las cadenas manipuladas por la biblioteca <cstring>/<string.h>. En C++, se puede usar la clase std :: string en su lugar.

Tenga en cuenta que en C++ una constante de caracteres como '\0' o 'a' tiene el tipo char. En C, por razones quizás oscuras, tiene el tipo int.

+0

Hubiera dado el +1 solo por decir NUL en lugar de nulo, pero el resto también fue bastante bueno ... –