what can 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); }
He will produce this conclusion:
73 61 00 63 68 sa ch 73 61 00 00 00 sa
You can see that "ch" was copied to memcpy() , but not strcpy() .
egrunin May 24 '10 at 10:14 a.m. 2010-05-24 22:14
source share