memcpy()和strcpy()有什么区别?我试着在一个程序的帮助下找到它,但两者都给出了相同的输出。
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;
}输出
sachin p is [sa], t is [sa]发布于 2010-05-25 06:14:36
如何才能看到这种效果
编译并运行以下代码:
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);
}它将生成以下输出:
73 61 00 63 68 sa ch
73 61 00 00 00 sa您可以看到"ch“是由memcpy()复制的,但不是strcpy()复制的。
发布于 2010-05-25 00:11:28
当遇到NUL ('\0')字符时,strcpy会停止,而memcpy不会。您在这里看不到效果,因为printf中的%s也在NUL处停止。
发布于 2010-05-25 00:12:43
当找到源字符串的空终止符时,strcpy将终止。memcpy需要传递size参数。在您给出的例子中,在为两个字符数组找到空终止符之后,printf语句会暂停,但是您会发现t[3]和t[4]也在其中复制了数据。
https://stackoverflow.com/questions/2898364
复制相似问题