关于memcpy、memset、memmove、strcpy、strncpy的使用
2012-08-03 00:36
465 查看
一.函数介绍:
1、memcpy
函数原型:extern void *memcpy(void *dest, const void *src, size_t count);
用法:#include<string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
注意:和strcpy相比,memcpy不是遇到’/0’就结束,而是一定会拷贝完n个字节。
函数实现代码:
2、memset
函数原型:extern void *memset(void *s, int c, size_t n)
功能:将已开辟内存空间s的首n个字节的值设为值c。将s中的前n个字符替换为c,并返回s。
memset常用于内存空间的初始化。
memset的深刻内涵:
1)用来对一段内科空间全部设置为某个字符,一般用在对定义的字符串进行初始化为:memset(a, ‘/0’, sizeof(a));
2)也可以方便的初始化结构变量的变量或数组.
如:
用memset初始化:
memset函数实现代码:
3、memmove
void *memmove(void *s, const void *ct, size_t n)
与memcpy类似,所不同的是,当对象重叠时,该函数仍能正确执行。
4、strncpy
函数原型:extern char *strncpy(char *dest, char *src, int n);
用法:#include <string.h>
功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。
说明:
如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。
如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针(该指向dest的最后一个元素)
实现代码:
5、strcpy:
函数原型:extern char *strcpy(char *dest,char *src);
头文件:string.h
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。如果src的结尾不是'/0'的话,那么系统会在src的结尾处自动加一个'/0'。例如:
函数实现代码:
1、memcpy
函数原型:extern void *memcpy(void *dest, const void *src, size_t count);
用法:#include<string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
注意:和strcpy相比,memcpy不是遇到’/0’就结束,而是一定会拷贝完n个字节。
函数实现代码:
void *memcpy(void *dest, const void *src, size_t count) { assert(dest!=NULL&&src!=NULL); char *tmp = dest; const char *s = src; while (count--) *tmp++ = *s++; return dest; }
2、memset
函数原型:extern void *memset(void *s, int c, size_t n)
功能:将已开辟内存空间s的首n个字节的值设为值c。将s中的前n个字符替换为c,并返回s。
memset常用于内存空间的初始化。
memset的深刻内涵:
1)用来对一段内科空间全部设置为某个字符,一般用在对定义的字符串进行初始化为:memset(a, ‘/0’, sizeof(a));
2)也可以方便的初始化结构变量的变量或数组.
如:
struct sample_struct { char csName[16]; int iSeq; int iType; };
struct sample_struct TEST[100];
用memset初始化:
memset( &stTest, 0, sizeof(struct sample_struct) ); memset( TEST, 0, sizeof(struct sample_struct)*100 );
memset函数实现代码:
void * memset(void* buffer, int c, int count) { char * buffer_p=(char*)buffer; assert(buffer != NULL); while(count-->0) *buffer_p++=(char)c; return buffer; }
3、memmove
void *memmove(void *s, const void *ct, size_t n)
与memcpy类似,所不同的是,当对象重叠时,该函数仍能正确执行。
4、strncpy
函数原型:extern char *strncpy(char *dest, char *src, int n);
用法:#include <string.h>
功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。
说明:
如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。
如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针(该指向dest的最后一个元素)
实现代码:
char * strncpy(char * dest,const char *src,size_t count) { char *tmp = dest; while (count-- && (*dest++ = *src++) != '/0') /* nothing */; return tmp; }
5、strcpy:
函数原型:extern char *strcpy(char *dest,char *src);
头文件:string.h
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。如果src的结尾不是'/0'的话,那么系统会在src的结尾处自动加一个'/0'。例如:
#include <stdio.h> #include <string.h> void main() { char array1[5]={'1','2','3','4','5'}; char array2[5]={'a','b','c'}; strcpy(array1,array2); printf("%s/n",array1); } 输出结果:abc
函数实现代码:
char *strcpy(char *strDest, const char *strSrc) { assert((strDest!=NULL) && (strSrc !=NULL)); char *address = strDest; while( (*strDest++ = * strSrc++) != '/0') NULL ; return address ; }
相关文章推荐
- 实现memcpy、memcpy的优化、memmove、memset、strcpy、strncpy
- 关于strcpy、memset、memcpy的使用详解
- strcpy、memset、memmove、memcpy和memccpy函数的使用和区别
- strcpy,memcpy,memmove,memset,strncpy
- strcpy,memcpy,memmove,memset,strncpy
- memset(),memcpy(),memccpy(),memmove(),bcopy(),strcpy(),strncpy()
- strcpy,memcpy,memmove,memset,strncpy
- strcat、strcmp、strcpy、strncpy、memset、memcpy、memmove和atoi函数源码
- 关于strcpy、memset、memcpy的使用详解
- 关于strcpy、memset、memcpy的使用详解
- strcpy,memcpy,memmove,memset,strncpy
- memcpy strcpy strncpy的使用
- bcopy(), memccpy(), memcpy(), strcpy(), strncpy()的区别与使用
- strcpy()、memcpy()、memmove()、memset()的实现
- strcpy(), memcpy(), memmove(), memset()原型及应用
- 细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数
- memcpy,strcpy,memset,memmove的函数实现
- C库中的strcpy,strncpy,memcpy,memmove,memset函数
- strcpy()、memcpy()、memmove()、memset()的实现
- 函数实现-memcpy-strcpy-memmove-memset