¿La función memcpy coloca el final de cadena "\0"?

Iniciado por Dano1952, 29 Junio 2018, 15:13 PM

0 Miembros y 1 Visitante están viendo este tema.

Dano1952

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.-

#include <stdio.h>
#include <time.h>
#include <string.h>

int main(int argc,char* argv[]) {

time_t tiempo = time(0);
struct tm *tlocal = localtime(&tiempo);
char output[128], fecha[11];
strftime(output,128,"%d/%m/%Y %H:%M:%S",tlocal);
memcpy( fecha, output, 10 );

printf("\n %s\n",fecha);

return 0;
}


Es todo, espero Uds. lo sepan.
Dano

MCKSys Argentina

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

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!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Dano1952

Ok, entendido y mil disculpas si pregunte algo muy obvio, realmente no encontraba la respuesta a mi duda.

fecha[10] = '\0';

Saludos y gracias.

MAFUS


Dano1952