
Sachin Chourasiya
Cuál es la diferencia entre memcpy()
y strcpy()
? Traté de encontrarlo con la ayuda de un programa, pero ambos dan el mismo resultado.
int main()
{
char s[5]={'s','a','\0','c','h'};
char p[5];
char t[5];
strcpy(p,s);
memcpy(t,s,5);
printf("sachin p is [%s], t is [%s]",p,t);
return 0;
}
Producción
sachin p is [sa], t is [sa]

egrunín
¿Qué se podría hacer para ver este efecto?
Compila y ejecuta este código:
void dump5(char *str);
int main()
{
char s[5]={'s','a','\0','c','h'};
char membuff[5];
char strbuff[5];
memset(membuff, 0, 5); // init both buffers to nulls
memset(strbuff, 0, 5);
strcpy(strbuff,s);
memcpy(membuff,s,5);
dump5(membuff); // show what happened
dump5(strbuff);
return 0;
}
void dump5(char *str)
{
char *p = str;
for (int n = 0; n < 5; ++n)
{
printf("%2.2x ", *p);
++p;
}
printf("\t");
p = str;
for (int n = 0; n < 5; ++n)
{
printf("%c", *p ? *p : ' ');
++p;
}
printf("\n", str);
}
Producirá esta salida:
73 61 00 63 68 sa ch
73 61 00 00 00 sa
Puedes ver que la “ch” fue copiada por memcpy()
pero no strcpy()
.

yan ramin
strcpy
se detiene cuando encuentra un NUL ('\0'
) personaje, memcpy
no. No ves el efecto aquí, como %s
en printf también se detiene en NUL.
strcpy
termina cuando se encuentra el terminador nulo de la cadena de origen. memcpy
requiere que se pase un parámetro de tamaño. En el caso que usted presentó el printf
La declaración se detiene después de que se encuentra el terminador nulo para ambas matrices de caracteres, sin embargo, encontrará t[3]
y t[4]
han copiado datos en ellos también.

Viswesn
strcpy
copia el carácter del origen al destino uno por uno hasta que encuentra el carácter NULL o ‘\0’ en el origen.
while((*dst++) = (*src++));
mientras que memcpy
copia datos (no caracteres) desde el origen hasta el destino de un tamaño dado n, independientemente de los datos en el origen.
memcpy
debe usarse si sabe bien que la fuente contiene algo que no sea carácter. para datos cifrados o datos binarios, memcpy es la forma ideal de hacerlo.
strcpy
está en desuso, así que use strncpy
.

jeremy friesner
La principal diferencia es que memcpy()
siempre copia el número exacto de bytes que especifique; strcpy()
por otro lado, copiará hasta que lea un byte NUL (también conocido como 0), y luego se detendrá después de eso.
- Diferencia de comportamiento:
strcpy
se detiene cuando se encuentra con un NULL
o '\0'
- Diferencia de rendimiento:
memcpy
suele ser más eficiente que strcpy
que siempre escanea los datos que copia

Ayxan Haqverdili
Debido al carácter nulo en su s
cuerda, la printf
no mostrará nada más allá de eso. La diferencia entre p
y t
estará en los personajes 4 y 5. p
no tendrá ninguno (serán basura) y t
tendrá el 'c'
y 'h'
.
Ver stackoverflow.com/questions/2884874/…
–Doug Currie
24 de mayo de 2010 a las 16:29