• Domingo 15 de Diciembre de 2024, 09:32

Autor Tema:  Retorno del memcpy  (Leído 2193 veces)

meyiyiyi

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Retorno del memcpy
« en: Sábado 24 de Octubre de 2009, 21:13 »
0
Buenas tardes. Mi primer msj; estoy estudiando ing. en informatica, asi q me van a tener por un largo tiempo acá. Para empezar mi consulta:
Que valores me retorna el memcpy?... quiero saber si se ha copiado correctamente o ha surgido un error. Muchas Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Retorno del memcpy
« Respuesta #1 en: Sábado 24 de Octubre de 2009, 21:21 »
0
http://www.cplusplus.com/reference/clib ... ng/memcpy/

memcpy devuelve lo mismo que le pasas en el primer parametro (la direccion de destino de la copia), si esta falla se producira una excepcion.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

meyiyiyi

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Retorno del memcpy
« Respuesta #2 en: Sábado 24 de Octubre de 2009, 22:00 »
0
Ah claro!, en las referencias leia que devolvia s1; y s1 lo usavan como primer parametro., no comprendia.
Necesito realizar una copia y luego verificar si se copió o no, está bien de esta forma?:

int modificarCteLDEC(LDEC* ldec, void* elemento){
    memcpy(ldec->Cte->Elem,elemento,ldec->TamanioDato);
    if(ldec->Cte->Elem==elemento) return TRUE;
    else return FALSE;
}

Tengo tanto problemas con punteros que no se si está bien el álgebra de sus operaciones. Muchas gracias nuevamente ;-)

O mejor hecho así:

int modificarCteLDEC(LDEC* ldec, void* elemento){

if(memcpy(ldec->Cte->Elem,elemento,ldec->TamanioDato)==elemento) return TRUE;
else return FALSE;
}

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Retorno del memcpy
« Respuesta #3 en: Sábado 24 de Octubre de 2009, 23:32 »
0
No, no esta bien.

De cualquier manera la comprobacion seria redundante, si la copia falla se produce una excepcion (al no ser controlada el programa muere) de otra manera podes asumir sin problemas que funciono correctamente.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

meyiyiyi

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Retorno del memcpy
« Respuesta #4 en: Domingo 25 de Octubre de 2009, 00:00 »
0
Es que me piden que verifique si la copia se realizó con exito, como lo tengo que hacer?

EI: juntando mensajes, usa el boton editar si nadie responde por favor.

De todos modos no entiendo pq está mal.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Retorno del memcpy
« Respuesta #5 en: Domingo 25 de Octubre de 2009, 00:58 »
0
Usa memcmp pero no tiene sentido ...

if(memcpy(ldec->Cte->Elem,elemento,ldec->TamanioDato)==elemento) return TRUE;

La funcion memcpy retorna el primer parametro (destination) que en tu caso es ldec->Cte->Elem.

if(ldec->Cte->Elem==elemento) return TRUE;

Esto compara si ambos punteros apuntan a la misma direccion.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

meyiyiyi

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Retorno del memcpy
« Respuesta #6 en: Domingo 25 de Octubre de 2009, 01:25 »
0
Claro, estaba comparando las direcciones de memoria y no su contenido. Muchas gracias ;)