在程序设计的时候,遇到了这么一个Bug,复制一段 buf 总是缺斤少两,导致程序运行总是出现奇奇怪怪的现象,进过自己观察,才发现了问题根源:
char *strcpy(char *dest, const char *src);
strcpy ,原意string copy ,字符串拷贝,将 src 里面的字符串复制到 dest 里面,但是,有一个限制,它是从 src 第一个字符开始,到最近一个 '\0' 结束的位置,它将复制这一区间的数据,'\0'后的数据将被忽略,如下:
char dest[32] = {0}; char buf[] = {'I', ' ', 'a', 'm', ' ', 'b', 'u', 'f', ' ', 'o','n', 'e', '\0', 'O', 'v', 'e', 'r'}; strcpy(dest, buf);
最终 dest 中的数据为 "I am buf one",而没有后面的 "Over" 单词,因为 strcpy 遇到 '\0' 时将结束拷贝(strlen与之一样,在遇到'\0'时停止计数),所以要想将 buf 中的全部内容复制进dest 中,可以换用 memcpy ,memcpy 是内存拷贝函数,与strcpy的区别是,拷贝内存中指定地址开始的指定长度的内存数据,而不去检查内存数据是什么。
借此警醒,对复制函数的使用一定要分清场合,如果单单是字符串的拷贝,可以使用字符串函数(还要注意该字符串的长度,一个字符串的结束是'\0',如果一个字符串中间插入了多个'\0',那么就会被分为多个字符串),但如果包含其他数据,建议使用memcpy。