What is the difference between memcpy() and strcpy()? I tried to find it with the help of a program but both are giving the same output.
strcpy stops when it encounters a NULL or '\0'memcpy is usually more efficient than strcpy, which always scan the data it copiesstrcpy terminates when the source string's null terminator is found. memcpy requires a size parameter be passed. In the case you presented the printf statement is halting after the null terminator is found for both character arrays, however you will find t[3] and t[4] have copied data in them as well.
what could be done to see this effect
Compile and run this code:
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);
}
It will produce this output:
73 61 00 63 68 sa ch
73 61 00 00 00 sa
You can see that the "ch" was copied by memcpy(), but not strcpy().