最近在做一个项目遇到了一些小问题, 通过增加打印以及代码推敲排查后发现居然是系统接口调用错误导致,其实根因还是对系统接口源码实现理解不够到位,在这里简单总结下:
strcpy和memcpy都是C语言中常用的字符串复制函数,它们的主要区别如下:
1. 参数类型不同:strcpy的参数是字符指针,而memcpy的参数是void指针。
2. 处理方式不同:strcpy会处理字符串结尾的'\0'字符,而memcpy不会。
3. 用途不同:strcpy主要用于复制字符串,而memcpy可以用于复制任意类型的数据。
4. 安全性不同:由于strcpy不检查目标空间是否足够大,可能会导致缓冲区溢出;而memcpy则不会出现这种情况。因此,使用memcpy更加安全。
5. 性能不同:由于strcpy需要额外处理字符串结尾的'\0'字符,因此在复制较短的字符串时,可能会比memcpy慢一些。但对于较长的字符串,两者的性能差异不大。
strcpy源码实现:
char* strcpy(char* dest, const char* src)
{
char* p = dest;
while(*src != '\0')
{
*p++ = *src++;
}
*p = '\0';
return dest;
}
memcpy源码实现:
void *memcpy(void *dest, const void *src, size_t n)
{
char *d = (char *)dest;
const char *s = (const char *)src;
while (n--) {
*d++ = *s++;
}
return dest;
}