Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/11/2014, 02:58
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 2 meses
Puntos: 83
Respuesta: borrar cosas basura o inicializar una cadena con cosas nulas

Cita:
Iniciado por eferion Ver Mensaje
Además, no hay ninguna imposición para que "cadena1" y "cadena2" tengan que tener el mismo tamaño.
Revisa el codigo propuesto por @emmx2012, pone claramente char cadena1[MAX], cadena2[MAX] ; siendo MAX = 20 entiendo que son del mismo tamaño.

Cita:
Iniciado por eferion Ver Mensaje
"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
Estoy de acuerdo, y como hemos visto arriba tendran el mismo tamaño MAX; de todas formas repito: si no sabes el tamaño a copiar ¿cual será la longitud minima con la que a la vez puedes asegurar un minimo de datos basura? La misma que la fuente. Con esto quiero decir que no veo el objetivo de tu comentario.

Cita:
Iniciado por eferion Ver Mensaje
Si tu tienes:

Código C++:

Ver original

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...
Estoy de acuerdo, pero no se porque me lo comentas si en ningun sitio puse lo contrario.

De todas formas tu explicacion tampoco es del todo cierta: las funciones de volcado por pantalla no definen que es basura y que no. Con lo que te comenté anteriormente del tamaño necesario para copiar toda o parte de una cadena en otra sin memoria dinamica y sin saber la longitud a copiar, repito lo que puse en mi otro post: si tienes una fuente de 4 chars y copias 2 en destino (repito: de tambien 4 chars como capacidad minima), el resultado será que en destino te quedan 2 chars basura, independientemente de lo que te vaya a sacar printf; incluso rellenando los 2 chars sobrantes con 0 el resultado será que como minimo los siguientes chars al tamaño copiado sean basura.

@eferion espero que no tomes este post como critica, solo es una defensa de mi aportacion. De todas formas tu frase de "...Pasando ahora al tema de emmx2012..." me ha sentado como una desacreditacion o infravaloracion, algo como "dejemos las tonterias de vosk y pasemos a cosas importantes...". ¿A ti no? Si no es asi será una mala interpretacion por mi parte y pido disculpas.

Saludos
vosk


P.S.
Nota para los moderadores:

Ya se que este post no aporta nada al tema, solo me sirve para defender mi postura y aportacion al tema iniciado por @emmx2012. Si ven necesario borrarlo no tendre ningun problema en ello. Y dado que mi respuesta fue la misma que la de @eferion (la solucion de truncar con 0), si ven necesario borrar mi primer post tampoco tendré ningun problema en ello.

Saludos
vosk