[C con Clase] duda fin de cadenas

Salvador Pozo salvador en conclase.net
Jue Mayo 15 19:45:14 CEST 2014


El pasado 2014-05-15 16:43:02, Miguel Angel Ordoñez escribió:
 
MAO> El fin de una cadena ha de ir con el carácter nulo, que se corresponde con
MAO> \0, ¿no? sin embargo en el ejemplo 9.3, veo que se añade en alfabeto[26] un
MAO> cero. ¿Tiene el mismo valor el carácter ascii \0 que el cero?

El compilador hace una conversión implícita durante la comparación de modo que si la variable de destino es un char, el cero se convierte a char ('\0'), si es un int, se convierte a int, si es un float a float, etc.
Incluso, si la variable de destino es un puntero, el cero se convierte en un puntero nulo (NULL).
En realidad, entre todos estos ceros sólo hay una diferencia: el espacio que ocupan en memoria.

MAO> ¿El fin de cadena ha de ir siempre en la última posición? Es que choca que
MAO> si en una cadena quiero informa un carácter cero de verdad, se confunda
MAO> este con un fin de cadena.

No hay posibilidad de error, ya que el carácter nulo NUNCA puede formar parte de una cadena, siempre señala el final, independientemente de la posición que ocupe, esa siempre será la que indique el final de la cadena. Si quieres incluir un carácter cero en una cadena, no podrás usar una cadena C terminada en cero. En ese caso, tendrás que usar otro tipo de estructura para almacenar la cadena.

En rigor, el carácter nulo no puede formar parte de una cadena C. No tiene representación gráfica, y se usa sólo como marca.

Si el cero tiene que formar parte de los valores válidos para un entero de un byte, no será una cadena, o al menos, no será una cadena que puedas usar con las funciones estándar C ni con las clases y operadores de clases para cadenas C++.

MAO> En fin...dudas de novato. Tened paciencia.

No te preocupes, pregunta todo lo que quieras. :)

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net
Blog con Clase: http://blogconclase.wordpress.com
Con Clase: http://conclase.net


Más información sobre la lista de distribución Cconclase