下面我主要说说memcpy、strcpy、string::copy这三种
内存拷贝memcpy
陷阱
内存拷贝不会对字符串结束符’\0’进行检查
结果
拷贝结束后,在字符串末尾会出现乱码。
解决方案
申请内存时多申请一个字节内存,以保证将字符串结束符拷贝进去。
字符串拷贝strcpy
strcpy是专用于字符串拷贝的函数,与memcpy的区别就是,它会检测结束符’\0’,所以在申请内存时不用做多余申请。
语法/原型:
char* strcpy(char* strDestination, const char* strSource);
参数说明:
strDestination:目的字符串。
strSource:源字符串。
strcpy() 会把 strSource 指向的字符串复制到 strDestination。
必须保证 strDestination 足够大,能够容纳下 strSource,否则会导致溢出错误。
string方法拷贝string::copy
陷阱&结果
因为这里copy最终调用的函数仍然是memcopy,所以陷阱一样,拷贝完成后,会在字符串后面带上一串乱码
解决方案
在拷贝结束后,加上结束符’\0’。