memset
memset的作用是在一段内存块中填充某个给定的值。
void memset ( void* ptr, int value, size_t num );
将 ptr 指向的内存块从前往后 num 个字节用 value 替换。返回值为ptr
int main()
{
char arr[] = "abc";
memset(arr, 's', 2);
printf("%s",arr);
return 0;
}
//输出
//ssc
memcpy
memcpy 功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中。
void memcpy(void* destination,const void* source,size_t num)
从source的起始位置开始向后复制num个字节的数据到destination的内存位置。返回值为destination
int main()
{
char arr1[] = "abc";
char c = 'f';
char* cc = &c;
memcpy(arr1, cc, 1);
printf("%s",arr1);
return 0;
}
//输出
//fbc
strcpy
strcpy() 函数用于进行字符串复制 。
char* strcpy ( char* destination, const char* source );
destination -- 指向用于存储复制内容的目标数组。
source -- 要复制的字符串。拷贝包括了字符串的结束标志(并在该点处停止)。返回值为destination
int main()
{
char arr1[] = "abc";
char arr2[] = "defgh";
char a=strcpy(arr2, arr1);
printf("%s\n", arr1);
return 0;
}
//输出
//abc
经过调试发现 arr2 目前完整值为abc\0h\0 , arr1 中的 \0 也被拷贝到 arr2 中的对应位置。
总结
三种方法都可以变相理解为将源内存 source 拷贝到指定地址对应的 dest 内存中,并从 dest 的起始位置开始替换。
区别为:
1、memset
方法是拷贝给定的值到目标内存中,这个值往往是单字符类型,num 参数是重复拷贝这个字符的次数。
2、memcpy
方法是对源内存 source 进行复制,并将其拷贝到目标内存 dest 中,source 指向的值的类型可以是字符,也可以是字符串,num 参数是指从 source 的起始位置开始拷贝的字节数,拷贝后从 dest 的起始位置开始替换 dest。
3、strcpy
方法与 memcpy 方法相似,同样是将 source 对应的值拷贝到 dest 中,source 指向的值的类型可以是字符,也可以是字符串,但 strcpy 方法没有 num 参数用以控制拷贝的字节数,故等于是直接把整个 source 指向的值完整拷贝到 dest ,并从 dest 的起始位置开始替换 dest 。
注:strcpy
会拷贝完整的 source 指向值,包括结束标识 \0, memcpy
只拷贝 num 个字节的 source 指向值,若 source 指向值的字节数为 num,则不会拷贝 \0,若为 num+1,则拷贝 \0 到 dest 对应位置。