• Viernes 10 de Mayo de 2024, 20:17

Autor Tema:  '0' al final del array  (Leído 1109 veces)

chamber

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
'0' al final del array
« en: Lunes 27 de Octubre de 2008, 19:08 »
0
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
  1. for (i=0;i<=arrays;i++){
  2.        memcpy(bloques[i].cadena+2, texto+y, 10);
  3.        bloques[i].cadena[0] = '4';
  4.        if (y==arrays){
  5.           bloques[i].cadena[1] = '1';
  6.        }else bloques[i].cadena[1] = '0';
  7.         y= y+10;
  8. }
  9.  

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!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: '0' al final del array
« Respuesta #1 en: Lunes 27 de Octubre de 2008, 20:25 »
0
¿Cómo imprimes las subcadenas?

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: '0' al final del array
« Respuesta #2 en: Martes 4 de Noviembre de 2008, 08:08 »
0
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
  1. char datos[]="Hola";
  2.  
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
  1. else bloques[i].cadena[1] = '0';
  2.  

Te das cuenta que '0' es el literal "cero" y no '' (NULL), tenlo en cuenta
jmp 7C000h