• Lunes 29 de Abril de 2024, 02:23

Autor Tema:  Error en función y no se por qué  (Leído 1001 veces)

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Error en función y no se por qué
« en: Lunes 1 de Junio de 2009, 01:29 »
0
Hola a todos,
Hice una función para trabajar con un array de strings pero no sé por qué no me funciona.
Les pongo el code:
Código: C
  1.  
  2. void test( char **aray,int size)
  3. {
  4.  
  5. char **tmp;
  6. int i=0;
  7.  
  8. tmp=(char**)calloc(size,sizeof(char*));
  9.  
  10. for(i=0;i<size;i++)
  11. {
  12.     *(tmp+i)=(char*)calloc(strlen(*(aray+i)+1),sizeof(char));   
  13.     //strcpy(*(tmp+i),*(aray+i));
  14.     memcpy(*(tmp+i),*(aray+i),strlen(*(aray+i)+1));
  15. }
  16.    
  17.  
  18. for(i=0;i<size;i++)
  19. {
  20.     free(*(tmp+i));
  21. }
  22.  
  23. free(tmp);
  24.  
  25.  
  26.  

Si uso la declaración de la linea 14, no sé por qué no copia bien la cadena y si uso la declaración de la línea 13 me peta al hacer free.
Pueden decirme que hago mal ?
Gracias.

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Re: Error en función y no se por qué
« Respuesta #1 en: Lunes 1 de Junio de 2009, 02:23 »
0
Vale, ya me contesto solo xD.

Citar
Código: C
  1.  
  2. *(tmp+i)=(char*)calloc(strlen(*(aray+i)+1),sizeof(char));  
  3.  
  4.  
malditos paréntesis xD.
Código: C
  1.  
  2. *(tmp+i)=(char*)calloc(strlen(*(aray+i))+1,sizeof(char));
  3.  
  4.  
Código: C
  1.  
  2. memcpy(*(tmp+i),*(aray+i),strlen(*(aray+i)+1));
  3.  
  4.  
Idem
Código: C
  1.  
  2. memcpy(*(tmp+i),*(aray+i),strlen(*(aray+i))+1);    
  3.  
  4.  
Ya funciona con memcpy o strcpy.
La duda que me queda es qué es más recomendable el memcpy o el strncpy.
Gracias

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Error en función y no se por qué
« Respuesta #2 en: Lunes 1 de Junio de 2009, 10:03 »
0
Cita de: "krnl64"
La duda que me queda es qué es más recomendable el memcpy o el strncpy.
Depende. memcpy() copia bytes, sin importarle nada más. strncpy() actúa como copia de cadenas de caracteres, esto es, si encuentra un byte nulo en el buffer origen, a partir de ahí ya rellena con ceros el buffer destino hasta completar el tamaño requerido.

Usa memcpy() para copiar buffers y strncpy() para cadenas de caracteres.

Saludos