#include <stdlib.h>
#include <string.h>
int main()
{
char str1[100] = {"192.168.12.123"};
char str2[20]={"192.168.12.1"};
printf("%s\n",str1);
memcpy(str1,str2,strlen(str2)); //错误做法
//memcpy(str1,str2,strlen(str2)+1); //正确做法
printf("%s\n",str1);
}
在使用memcpy复制IP地址时发现:str1始终是192.168.12.123;
后来发现是strlen在计算字符串长度时不会计算'\0',因此memcpy将192.168.12.1传入str1后,str1只有前面部分被str2覆盖了,多余的长度依然保留着str1的数据,从而出现异常。正确的做法应该是在memcpy时,长度填 strlen(str1)+1 ,将str2的结束字符\0一起复制过去,这样就可以使用str2覆盖str1了。