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个字符。
posted @ 2023-02-22 10:31  小秦同学在上学  阅读(130)  评论(0编辑  收藏  举报