Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/11/2014, 02:02
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: borrar cosas basura o inicializar una cadena con cosas nulas

Cita:
Iniciado por vosk Ver Mensaje
Supongamos que la fuente origen tiene 4 letras y solo copias 2, entonces te quedan 2 de basura en el destino.
Eso no es del todo cierto.

Si tu tienes:

Código C++:
Ver original
  1. int main( void )
  2. {
  3.   const char* cadena1 = "Hola";
  4.   char cadena2[5];
  5.  
  6.   cadena2[ 0 ] = cadena1[ 0 ];
  7.   cadena2[ 1 ] = cadena1[ 1 ];
  8. }

e imprimes "cadena2" no tiene por qué imprimir 4 caracteres... sacará por pantalla basura hasta que encuentre un carácter nulo por el camino... aunque ello implique leer fuera de la memoria reservada para dicha variable.

Además, no hay ninguna imposición para que "cadena1" y "cadena2" tengan que tener el mismo tamaño. "cadena2" puede tener el tamaño que se desee ya que el único requisito que ha de cumplir es que su longitud mínima ha de permitir almacenar el string deseado.

Pasando ahora al tema de emmx2012, para finalizar un string simplemente has de incluir el carácter nulo '\0' al final de la cadena:

Código C++:
Ver original
  1. int main( void )
  2. {
  3.   const char* cadena1 = "Hola";
  4.   char cadena2[5];
  5.  
  6.   cadena2[ 0 ] = cadena1[ 0 ];
  7.   cadena2[ 1 ] = cadena1[ 1 ];
  8.   cadena2[ 2 ] = '\0'; // Finalizamos el string
  9.  
  10.   printf( "%s\n", cadena2 );
  11. }

Ten en cuenta que esto implica que si en una cadena quieres almacenar un string de 10 caracteres, necesitas que la cadena tenga al menos 11 caracteres de capacidad para poder añadir el carácter nulo.

Un saludo.