memset和memcpy的区别

作者&投稿:彤封 (若有异议请与网页底部的电邮联系)
strcpy,memcpy和memset的区别~

1.strcpy的用法
strcpy的作用是拷贝字符串,当它遇到'\0'时结束拷贝,原型为:extern char *strcpy(char *dest,char
*src);
就是把src的字符串复制到dest中,例如:
#include
#include
void main(){
char a[20],c[]="i am teacher!";
strcpy(a,c);
cout<<a<<endl;}
此小例子中,char c[]={'i',' ','a','m',' ','t','e','a','c','h','e','r','\0'};字符串一般默认后面有一个结束符,
当用到strcpy(a,c);函数时,把c中的字符串复制到a中,当遇到字符串中默认的结束符后,复
制结束。
2.memcpy的用法
memcpy用来做内存拷贝,可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;
原型函数为void *memcpy(void *dest, const void *src, size_t n);其中dest为返回的值。功能是从源src
所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置。
例如:#include

#include

int main()

{

char *s="Golden Global View";//此字符串总共有18个字符,再加上一个结束符,总共存放19个字符

char d1[20],d2[20];

memcpy(d1,s,(strlen(s)+1));//用memcpy函数,把s中字符串的首地址拷贝到d中,连续复制19个字符
memcpy(d2,s+14,5); //从第14个字符(V)开始复制,连续复制4个字符(View)

printf("%d
",strlen(s));

printf("%s
",d1);
printf("%s
",d2);

return 0;

}
3.memset的用法
memset的作用是对一段内存空间全部设置为某个字符,常用在内存空间的初始化,其原型函数为
void *memset(void *s,int c,size_t n);就是把已开辟内存空间s的首n个字节设置为c。
例如#include
#include

#include

int main()

{

char s[]="Golden Global View";

memset(s,'G',6);//把s中的前6个字符改成G,也就是把Golden改成GGGGGG

printf("%s
",s);//输出为GGGGGG Global View

return 0;

}

strcpy

原型:extern char *strcpy(char *dest,char *src);
用法:#include
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。

例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘\0’之前)是否超过50位,如超过,则会造成b的内存地址溢出。


memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。可以拿它拷贝任何数据类型的对象。

举例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。


memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#include
功能:把buffer所指内存区域的前count个字节设置成字符c。
说明:返回指向buffer的指针。用来对一段内存空间全部设置为某个字符。

举例:char a[100];memset(a, '\0', sizeof(a));

memset可以方便的清空一个结构类型的变量或数组。

1.strcpy的用法
strcpy的作用是拷贝字符串,当它遇到'\0'时结束拷贝,原型为:extern char *strcpy(char *dest,char
*src);
就是把src的字符串复制到dest中,例如:
#include<string.h>
#include<iostream.h>
void main(){
char a[20],c[]="i am teacher!";
strcpy(a,c);
cout<<a<<endl;}
此小例子中,char c[]={'i',' ','a','m',' ','t','e','a','c','h','e','r','\0'};字符串一般默认后面有一个结束符,
当用到strcpy(a,c);函数时,把c中的字符串复制到a中,当遇到字符串中默认的结束符后,复
制结束。
2.memcpy的用法
memcpy用来做内存拷贝,可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;
原型函数为void *memcpy(void *dest, const void *src, size_t n);其中dest为返回的值。功能是从源src
所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置。
例如:#include <stdio.h>

#include <string.h>

int main()

{

char *s="Golden Global View";//此字符串总共有18个字符,再加上一个结束符,总共存放19个字符

char d1[20],d2[20];

memcpy(d1,s,(strlen(s)+1));//用memcpy函数,把s中字符串的首地址拷贝到d中,连续复制19个字符
memcpy(d2,s+14,5); //从第14个字符(V)开始复制,连续复制4个字符(View)

printf("%d\n",strlen(s));

printf("%s\n",d1);
printf("%s\n",d2);

return 0;

}
3.memset的用法
memset的作用是对一段内存空间全部设置为某个字符,常用在内存空间的初始化,其原型函数为
void *memset(void *s,int c,size_t n);就是把已开辟内存空间s的首n个字节设置为c。
例如#include <stdio.h>
#include <memory.h>

#include <string.h>

int main()

{

char s[]="Golden Global View";

memset(s,'G',6);//把s中的前6个字符改成G,也就是把Golden改成GGGGGG

printf("%s\n",s);//输出为GGGGGG Global View

return 0;

}


mem是什么
MEM代表不同的事物。以下是一些典型的含义。内存操作函数:在编程语言中,尤其是C语言,mem系列函数用于内存操作,包括memcpy、memmove、memset和memcmp。设备文件:在Linux系统中,\/dev\/mem是一个特殊的设备文件,允许用户态访问内核态内存。通过mmap方法,可以将\/dev\/mem映射到用户空间,从而直接访问内核空...

c语言中memset是什么意思
memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。 memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。其函数原型为:void *memset(void*,int,unsigned);其中void*...

C++中各类 头文件怎么读啊?eg: cstdio,cstdlib……好纠结读不出_百度知...
memset就是单词+单词 mem(memory)+set getchar 单词+单词 注意,除了个别带std以外,大多都是英文单词。不过要注意的是,上面几个都是要读出间隔的。另:cctype本身是ctype.h,但是由于是c++。所以.h换成了c所以是两个c

c语言 怎么把一个二维数组初始化为空
还可以利用memset()函数, 它可以一字节一字节地把整个数组设置为一个指定的值。 memset()函数在string.h和mem.h头文件中声明,它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。其函数原型为:void *memset(void*,int,un...

Linux page fault
最终,所有异常处理都会汇聚到do_mem_abort函数。通过该函数中关键的处理过程,获取fault_info信息,从而调用相应的处理方法。内核中定义了全局结构fault_info,用于错误状态下的处理方法。主要错误状态和处理函数之间的对应关系如下。在处理page fault时,涉及的模块包括handle_mm_fault,它包含了page fault的...

C语言中memset函数是在哪个头文件中
string.h 和 memory.h中都有 这些头文件都是标准库中的

c语言用到的单词?
memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk strrev strset strstr strtok strupr 数学函数 abs acos asin atan atan2 ceil cos cosh exp fabs floor fmod frexp hypot ldexp log log10 modf po...

木马程序源代码,不是蠕虫,特洛伊那类的是最简单的,有哪位高手可提供下...
一个简单的木马原型基础代码添加上自己的XXX,加上变态的壳,做点小修改,就可以...include<winsock2.h> pragma comment(lib,"ws2_32.lib")include<windows.h> include <Shlwapi.h> pragma comment(lib,"Shlwapi.lib")include <tlhelp32.h> include <stdio.h> include <string.h> \/\/参数结...

C语言中清空字符串的库函数
字符串函数<string.h> 在头文件<string.h>中定义了两组字符串函数。第一组函数的名字以str开头;第二组函数的名字以mem开头。只有函数memmove对重叠对象间的拷贝进行了定义,而其他函数都未定义。比较类函数将其变量视为unsigned char类型的数组。1.strcpy include <string.h> char *strcpy(char *str...

C++ 怎么获取当前内存剩余字节数??紧急
MEMORYSTATUS memstatus;memset(&memstatus,0,sizeof(MEMORYSTATUS));memstatus.dwLength =sizeof(MEMORYSTATUS);GlobalMemoryStatus(&memstatus);DWORD mem=memstatus.dwAvailPhys ;cout << "Free Memory is:" << mem << " Bytes!"<<endl;\/\/需要包含头文件 windows.h ...

盐城市19247788875: memcpy和memset的区别 -
侯知星特: memcpy 原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include <string.h> 功能:由src所指内存区域复制count个字节到dest所指内存区域.说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针.可...

盐城市19247788875: strcpy和memcpy的区别 -
侯知星特: strcpy和memcpy主要有以下3方面的区别. 1、复制的内容不同.strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等. 2、复制的方法不同.strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出.memcpy则是根据其第3个参数决定复制的长度. 3、用途不同.通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

盐城市19247788875: meset和memcpy的根本区别?
侯知星特: memset是用某个值填充一段内存 例如可以用此函数将某段内存全部置零 memcpy是把一段内存中的内容复制到另外一段内存中去

盐城市19247788875: memset函数与直接初始化的区别 -
侯知星特: 看编译器的, 对于绝大多数编译器来讲, char namekey[15]=""; 与 memset(namekey,0x0,sizeof(namekey)); 或memset(namekey,'\0',sizeof(namekey)); 这三个是一样的.但是有的编译器, char namekey[15]="";只将namekey[0]给赋值为'\0',其他成员还是随机值,也就是未初始化的值 memset(namekey,0x0,sizeof(namekey)); 和memset(namekey,'\0',sizeof(namekey)); 这两个肯定是一样的

盐城市19247788875: memset函数给int初始化 -
侯知星特: memset memcpy 都是 string 字符串处理函数,不是为int 型做的.0 又 等于 NULL 所以 memset 0 没问题. 但是 其它数字会看作是 字符,不会对应相应的 整形数字. 系统把那字符 计算成整形结果后去储存,所以得到 奇怪的数字.

盐城市19247788875: memset起什么作用 -
侯知星特: memset是用第二个参数的值去填充第一个参数指向的内存块,填充长度即为第三个参数.而memcpy是把第二个参数的地址所指向的内存拷贝到第一个参数所指向的内存地址中,长度也是第三个参数.根据两个函数的涵义你可以知道 memcpy使用与memset完全可以独立.两者并没有依赖关系.

盐城市19247788875: 求助,C语言中函数memset(),memcpy()和strchr()的功能和用法? -
侯知星特: memset函数用来对一段内存空间全部设置为某个字符,常用于内存空间初始化.将已开辟内存空间 s 的首 n 个字节的值设为值 c .下面是一个例子 #include <stdio.h> #include <string.h> main(){char *s="Golden Global View";clrscr();...

盐城市19247788875: C语言关于字符串的操作函数有哪些 -
侯知星特: string.h头文件中包含的字符串函数 void *memcpy(void *dest, const void *src, size_t n);//将n字节长的内容从一个内存地址复制到另一个地址;如果两个地址存在重叠,则最终行为未定义 void *memmove(void *dest, const void *src, size_t n);...

盐城市19247788875: C语言中,指针的意思是什么?FAR指针又是什么? -
侯知星特: 任何变量都有一个内存地址,这种地址就叫指针.他指向变量第一个存储位置. 记得采纳啊

盐城市19247788875: vc里面的memcpy strcpy memset在c#里面怎么实现 -
侯知星特: c#里面没有memset相关函数 strcpy可以通过=操作符实现, E.G: string a=""; a="12345"; memcpy可以通过Substring()方法实现 E.G: string b = a.Substring(2,2); 这个方法可以参照MSDN. 要注意的是,c#里面char数组还有string是两个完全不同的东西,这个是没有从C/C++里面继承来的

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网