首页 > 其他分享 >memset,memcpy,strcpy 有什么区别?

memset,memcpy,strcpy 有什么区别?

时间:2023-11-19 21:32:21浏览次数:38  
标签:dest memset char source num arr1 strcpy 拷贝 memcpy

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 对应位置。


标签:dest,memset,char,source,num,arr1,strcpy,拷贝,memcpy
From: https://blog.51cto.com/u_16354131/8475725

相关文章

  • 模拟实现常见的strlen、strcpy、strcmp库函数,深入理解它们的原理
    ⛩️博主主页:@威化小餅干......
  • strcpy、strncpy、memcpy 区别与实现
    strcpy、strncpy、memcpy的区别strcpy描述将一个字符串复制到另一个字符串中实现char*myStrcpy(char*dest,constchar*src){if((NULL==dest)||(NULL==src)){returnNULL;}char*strDest=dest;constchar*strSrc=src;......
  • Windows下VC++编译器32位memcpy、memmove函数汇编代码详解
    整理者:赤勇玄心行天道QQ号:280604597微信号:qq280604597QQ群:511046632博客:www.cnblogs.com/gaoyaguo  blog.csdn.net/cyz7758520?type=blog大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的!你可以随意转载,无需注明出处!写文档实属不易,我希望大家能支......
  • strcpy
    一、实现我们先看函数传递的参数,是两个指针,一个是strSource(字符串的源头),另一个是strDestination(字符串的目的地),因此,我们也需要传递两个指向字符串地址的指针。而我们知道库里的strcpy函数会传递源头字符串末尾的'\0',因此我么可以这样来写代码。代码如下:include<stdio.h>voi......
  • 【c&c++】C++中memset()函数的用法详解
    头文件:cstring 或 memory话说刚开始使用memset的时候一直以为memset是对每一个int赋值的,心里想有了memset还要for循环对数组进行初始化干嘛。但其实memset这个函数的作用是将数字以单个字节逐个拷贝的方式放到指定的内存中去memset(dp,0,sizeof(dp));int类型的变量一般占......
  • c语言之memset的初次小练
    //memset--memoryset内存设置//memset(void*ptr,intvalue,size_tnum);//翻译过来就是memset(一个地址,一个你想要将地址中的原有值改为该值,该地址中从左往右的原有的值的数)#include<stdio.h>#include<string.h>intmain(){ chararr[]="helloworld"; memset(arr,......
  • 内存函数,memcpy,memmove,memcmp,memset
    structs{ charname[20]; intage;};intmain(){ intarr1[]={1,2,3,4,5}; intarr2[5]={0}; structsarr3[]={{"张三",20},{"李四",18}}; structsarr4[3]; memcpy(arr4,arr3,sizeof(arr3)); //memcpy(arr2,arr1,sizeof(a......
  • CUDA cudaMemcpy函数总结
    在使用cuda的时候一定会用到cudaMemcpy这个函数,因为我们就是用它实现数据在CPU与GPU之间的移动,想在GPU端计算就必须要将数据从CPU拷贝到GPU,想要获得GPU的计算结果就必须将结果拷贝回CPU。但是在使用这个函数的时候对它的第一个参数存在一些疑惑,经过查找资料后做个简单的总结。首......
  • CUDA Memcpy的分析
    CUDAMemcpy是一种CUDA库中的函数,可以在主机内存和设备内存之间复制数据。本文将从功能、使用方法、性能、优化等多个角度详细介绍CUDAMemcpy。一、功能CUDAMemcpy的主要功能是在设备内存和主机内存之间进行数据传输。它可以将主机上的数据发送到GPU上,也可以将GPU上的数据传输到......
  • memcpy赋值/复制速度快的底层
    memcpy赋值速度一般来说比多重for循环更快,对于其底层原理十分感兴趣,面向百度,总结了一些答案,不是很专业,就是理解个大概总的来说有这么两个主要原因:1.SIMD:就是使用多个微处理器对同一个数据进行操作,其实就是并行操作参考:https://zhuanlan.zhihu.com/p/553270372.......