strcpymemcpy都是标准C库函数,它们有下面的特点。

strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。该函数返回一个指向目标存储区 str1 的指针。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

int a = 12;
int *p = malloc(sizeof(int));
// 初始化分配的堆空间
memset(p, 0x00, sizeof(int));

// 将变量a空间的内容拷贝到p指向的空间
memcpy(p, &a, sizeof(int));

return 0;
}

strcpymemcpy运用场景的选择

  1. 复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
  2. 复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符”\0”才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
  3. 用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Student {
int age;
int height;
};

int main() {

struct Student stu = {12, 167};
struct Student *stuP = malloc(sizeof(struct Student));

// 内容拷贝 该函数返回一个指向目标存储区 str1 的指针。
memcpy(stuP, &stu, sizeof(struct Student));

printf("%d\n", stuP->age);
printf("%d\n", stuP->height);

return 0;
}