Programación General => C/C++ => Mensaje iniciado por: chamber en Lunes 27 de Octubre de 2008, 19:08
Título: '0' al final del array
Publicado por: chamber en Lunes 27 de Octubre de 2008, 19:08
Hola, queria haceros una pregunta haber si me podeis ayudar, que yo no encuentro la solucion :ouch:
Tengo un programa cuya funcion es coger una cadena y partirla en subcadenas, estas subcadenas constan de 12bytes, el 1º y el 2º podriamos decir que son estaticos, y donde se copia las subcadenas es apartir del byte 3 en adelante(10bytes)
Primero incializo los arrays y todo a '0'. Lo de copiar los substrings lo hago mediante la funcion memcpy
Código: Text
for (i=0;i<=arrays;i++){
memcpy(bloques[i].cadena+2, texto+y, 10);
bloques[i].cadena[0] = '4';
if (y==arrays){
bloques[i].cadena[1] = '1';
}else bloques[i].cadena[1] = '0';
y= y+10;
}
De esta forma la cadena se va copiando en intervalos de 10bytes, cosa que hace perfectamente pero sucede que cuando voy a imprimir las subcadenas (con otro for) si la cadena tiene 10bytes al imprimir (por pantalla) sale un 0 al final, esto no ocurre si la cadena tiene 9 o menos bytes.
Alguna idea de porque puede ser?
PD: Se me ocurrio incializar todos los arrays a 'x' haber que pasaba, y al imprimir en vez de un '0' al final, salia una 'x'.
Espero haberme explicado, si no entendeis algo o preferis que ponga todo el codigo lo pongo
Muchas gracias!
Título: Re: '0' al final del array
Publicado por: m0skit0 en Lunes 27 de Octubre de 2008, 20:25
¿Cómo imprimes las subcadenas?
Título: Re: '0' al final del array
Publicado por: sharek en Martes 4 de Noviembre de 2008, 08:08
No se si habrás caído en la cuenta que los arrays de char (strings) terminan en el byte nulo ( ) para indicar el EOL, todas las cadenas de texto en C deben tenerlas, si no, funciones como strcpy, printf etc.. no sabrían donde han de parar de leer y te imprimirían la memoria del programa (código u otras variables) hasta encontrar un '0' de pura suerte.
si tu creas una cadena:
Código: Text
char datos[]="Hola";
Estás creando un array de 5 byte, no 4 ya que es 'H','o','l','a',' '
memcpy NO añade ese , strcpy y strncpy si lo generan
EI: Juntando mensajes, por favor si no hay ninguna respuesta en el medio usen el boton editar.
releyendo tu mensaje....
Código: Text
else bloques[i].cadena[1] = '0';
Te das cuenta que '0' es el literal "cero" y no ' ' (NULL), tenlo en cuenta