strcpy和memcpy
你知道strcpy和memcpy的区别是什么吗?
char *strcpy(char *dest, const char *src)
- 参数:
- dest:指向用于存储复制内容的目标数组。
- src -- 要复制的字符串。
void *memcpy(void *str1, const void *str2, size_t n)
- 参数:
- str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
- str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
- n -- 要被复制的字节数。
int sprintf(char *str, const char *format, ...)
- 参数
- str -- 这是指向一个字符数组的指针,该数组存储了 C 字符串。
- rmat -- 这是字符串,包含了要被写入到字符串 str 的文本。
- 复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
- 复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
- 用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
说一说strcpy、sprintf与memcpy这三个函数的不同之处
- 操作对象不同
- strcpy的两个操作对象均为字符串
- sprintf的操作源对象可以是多种数据类型,目的操作对象是字符串
- memcpy的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。
- 执行效率不同
- memcpy最高,strcpy次之,sprintf的效率最低。
- 实现功能不同
- strcpy主要实现字符串变量间的拷贝
- sprintf主要实现其他数据类型格式到字符串的转化
- memcpy主要是内存块间的拷贝
strcpy函数和strncpy函数的区别?哪个函数更安全?
char* strcpy(char* strDest, const char* strSrc)
char *strncpy(char *dest, const char *src, size_t n)
- strcpy函数: 如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。
- trncpy函数:用来复制源字符串的前n个字符,src 和 dest 所指的内存区域不能重叠,且 dest 必须有足够的空间放置n个字符。