memcp与strcpy的区别,容易被忽视,strcpy有字符串终止符,也就是因为这个容易导致越界
void Data_copy(u8 *dest,u8 *src,u8 count)
{
*dest=0;
while(count--)
{
*dest++ = *src++;
}
//*dest = *src; 有这个相当于strcpy,没这个就相当于memcpy
}
举个简单的例子
u8 listbuff[8]={0};
u8 time_count=0;
假使看编译生成的内存分布,listbuff 和 time_count是顺序分布,一旦越界,每次操作listbuff都会改变time_count的值。结果可想而知,会出现意想不到的结果。
当一串字符长度为N,正确的做法是申请数组大小为N+1,最后一个为字符串终止符。ascii码复制一般不会添加字符串终止符。字符串复制才会添加。
单片机开发一定要注意。