memcpy
C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。
下面是 memcpy() 函数的声明。
void *memcpy(void *str1, const void *str2, size_t n)
参数
- str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
- str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
- n -- 要被复制的字节数
返回值
该函数返回一个指向目标存储区 str1 的指针。
// 将字符串复制到数组 dest 中
#include <stdio.h>
#include <string.h>
int main()
{
const char src[50] = "http://www.runoob.com";
char dest[50];
//printf("%d\r\n",strlen(src));
memcpy(dest, src, strlen(src)+1);
printf("dest = %s\n", dest);
return(0);
}
结果
Strlen 计算字符串长度
这里 memcpy(dest, src, strlen(src)+1) 要进行加1的操作。也就是算上\0.
如果不加,最后的结果为
memset 和 memcpy
二者的区别是
memset是将第二个参数的值赋给第一个参数,第二个参数是一个数值类型的数。像什么unisgned char,unsigned int ,int ,long 等等。第一个参数是数组类型的数。
memcpy的第一个和第二个参数都是数组类型的。
他们的第三个参数是一样的。都是表示传输的字节数,所以这里土建使用unsigned char 类型的。
#include <stdio.h>
#include <string.h>
int main()
{
unsigned char arr[6] = "abcde";
unsigned char arr1[6];
memcpy(arr1, arr, 6);
printf("%s\r\n", &arr1[2]);
printf("%s\r\n", arr1);
printf("%s\r\n", &arr);
}
可以看到%s可以打印数组当前以及当前之后的内容。