Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Dano1952 en 29 Junio 2018, 15:13 pm



Título: ¿La función memcpy coloca el final de cadena "\0"?
Publicado por: Dano1952 en 29 Junio 2018, 15:13 pm
Hola a todos, buen día.-
Tengo esa duda y por mas que busco ninguna página que consulto me da la respuesta, estoy haciendo una agenda y quiero poner en cada registro la fecha de alta del contacto.-

Código
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <string.h>
  4.  
  5. int main(int argc,char* argv[]) {
  6.  
  7. time_t tiempo = time(0);
  8. struct tm *tlocal = localtime(&tiempo);
  9. char output[128], fecha[11];
  10. strftime(output,128,"%d/%m/%Y %H:%M:%S",tlocal);
  11. memcpy( fecha, output, 10 );
  12.  
  13. printf("\n %s\n",fecha);
  14.  
  15. return 0;
  16. }

Es todo, espero Uds. lo sepan.
Dano


Título: Re: ¿La función memcpy coloca el final de cadena "\0"?
Publicado por: MCKSys Argentina en 29 Junio 2018, 17:31 pm
Hola!

Si le haces click a la función en el código que has colocado, verás como funciona la misma.

De http://pubs.opengroup.org/onlinepubs/009695399/functions/memcpy.html (http://pubs.opengroup.org/onlinepubs/009695399/functions/memcpy.html)

Citar
The memcpy() function shall copy n bytes from the object pointed to by s2 into the object pointed to by s1. If copying takes place between objects that overlap, the behavior is undefined.

Osea, no dice nada de string, ni de ceros al terminar, ni nada. Sólo copia de A a B, n bytes.

Osea, el null char se lo tienes que colocar tú; o bien, copiar a un buffer con ceros y esperar que la función de copia no sobreescriba el último byte con algo que no sea cero.

Saludos!


Título: Re: ¿La función memcpy coloca el final de cadena "\0"?
Publicado por: Dano1952 en 29 Junio 2018, 20:00 pm
Ok, entendido y mil disculpas si pregunte algo muy obvio, realmente no encontraba la respuesta a mi duda.

Código
  1. fecha[10] = '\0';

Saludos y gracias.


Título: Re: ¿La función memcpy coloca el final de cadena "\0"?
Publicado por: MAFUS en 30 Junio 2018, 08:43 am
Para eso usa strcpy que sí lo coloca.


Título: Re: ¿La función memcpy coloca el final de cadena "\0"?
Publicado por: Dano1952 en 30 Junio 2018, 17:22 pm
Ok,ok esa es la función ideal.
Gracias MAFUS.