作用:对较大的结构体或数组进行清零操作的一种最快方式
1、memset是对字节进行操作,可以用memset可以对字符数组进行赋初值,但不能对非字符型数组赋初值
例如:
①
char ch[20];
memset(ch,0,sizeof(ch));//正确
memset(ch,0,20);//正确,因为字符只占一个字节
②
int num[20];
memset(num,0,sizeof(num));//正确
memset(num,0,20*sizeof(int));//正确
memset(num,1,sizeof(num));//错误,符能对非字符型数组进行赋值
2、清理结构体或结构体数组:
①
Some x;//结构体Some
memset(&x,0,sizeof(Some));
②
Some x[10];//结构体数组
memset(x,0,sizeof(Some)*10);
引用:
memset可以方便的清空一个结构类型的变量或数组。
如:
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
对于变量
struct sample_strcut stTest;
一般情况下,清空stTest的方法:
stTest.csName[0]='\0';
stTest.iSeq=0;
stTest.iType=0;
用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct));
如果是数组:
struct sample_struct TEST[10];
则
memset(TEST,0,sizeof(struct sample_struct)*10);
另外:
如果结构体中有数组的话还是需要对数组单独进行初始化处理的。
memset补充:
汗,以前一直以为可以
int a[10];
memset(a, 1, sizeof(a));
今天才发现,这是一个天大的错误,自己以前居然没有意识到~~~
事情追溯到今天下午做ACM题,想全部置1,结果发现输出的是怪数字。纳闷之下百度一查,石破天惊~~~
这里把原因说下:
先看了MSDN:
我不明白为何在给出的格式中有int出现,但是Remarks明确指出了:
Sets the first count characters of dest to the character c
其实这都不是重点,重点就是理解为何是这样:
memset是一个字节一个字节的设置.
把一个int的每个字节都设置为1,也就是0×01010101,十进制就是16843009
而在全部置0或者-1就没事。这是因为:
设置为0 就是0×00000000
设置-1就是FF,所以每个字节都置为-1就是0xFFFFFFFF,还是-1。
这也是为何可以置0和置1的原因。
如果想全部置1,只需用for即可。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
memcpy 用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度。
例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。
Strcpy 就只能拷贝字符串了,它遇到'\0'就结束拷贝。
例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘\0’之前)是否超过50位,如超过,则会造成b的内存地址溢出。
str也可以用用个参数的strncpy(a,b,n)
分享到:
相关推荐
本文详细介绍了Memset、Memcpy、Strcpy 的作用及三者的区别,函数原型及使用技巧等。
memset,memcpy,strcpy 的用法,详细区别还有优缺点对比!
本篇文章是对C++中memset,memcpy,strcpy的区别进行了详细的分析介绍,需要的朋友参考下
主要介绍了C语言 strcpy和memcpy区别详细介绍的相关资料,需要的朋友可以参考下
strcpy和memcpy都是标准C库函数,它们有下面的特点。 strcpy提供了字符串的复制。...memcpy、memset和memset三个函数在使用过程中,均需包含以下头文件: //在C中 #include //在C++中 #include memcpy memcpy
自己对源代码做的一些整理,包括:atoi itoa strcpy strcat strlen memcpy memset等等常用的字符串处理函数,提供源代码实现。
自定义重写 C库的几个函数; memcpy, memset, memcmd, strlen, strcmp, strcpy, strfind等。
memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...
memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...
memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...
* 常见的字符串函数实现: * strlen * strcpy strncpy * strcmp strncmp * strcat strncat * strstr * * 内存操作: * memset、memcmp、memcpy、memmove * * 字符串和数组转换: * atoi itoa *
memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...
memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...
strcpy,strncpy,strcat,strncat,strcmp,strncmp,strchr,strnchr,strlen,strnlen,strspn,strpbrk,strtok,strsep,memset,bcopy,memcpy,memmove,memcmp,memscan,strstr,memchr.函数具体实现内容。对理解C语言和C编程有...
w_crt A hobby c runtime library on linux system(x86). ... string opeartions(printf, itoa, strlen, strcpy, strcat, strncat, strchr, strrchr, strcmp, strncmp, memcpy, memset).
memset(a,0,sizeof(a)); int i=0,j; char t; cin.getline(a,50,'\n'); for(i=0,j=strlen(a)-1;i(a)/2;i++,j--) { t=a[i]; a[i]=a[j]; a[j]=t; } cout; } //第二种 string str; cin>>str; str.replace; ...
unsigned char *st_strcpy(unsigned char *t,unsigned char *s);//字符串拷贝 signed int st_strncmp(unsigned char *dest,unsigned char *src,unsigned int Len);//可变长度字符串大小比较 signed char st_toupper...
内核仅适用于 qemu(vexpress-a9 板)的微型操作系统。版本历史0.1.1 初始特征: 内存实用程序 (memcpy/memset/memcmp)。 字符串实用程序(strcmp/strcpy)。 格式化打印(使用简化的 prinf 格式的 kprint)。
tcc_memcpy tcc_memcmp tcc_memset tcc_strlen tcc_malloc tcc_free *********************************************************************************/ void get_hex_string(unsigned char *in_dat,int in_len,...