About memset应用、memcpy和strcpy比较
2013-11-22 09:34
281 查看
把最近应用比较多的关于string的操作函数做一下总结。 一、首先说一下memset,在很多类和结构体中都会用到它来做初始化,比较好用。 函数原型:void memset(void* s,char ch,size_t n) 函数解释:把s中的前n个字节用ch替换并且返回s 作用:在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快的方法。 需要的头文件 C++ #include <string> 如最简单的结构体内初始化:
struct tData { int nData; char szData[255]; tData() { memset(tData,0,sizeof(tData)); } }也可以用做数组进行清零操作:
struct tObj { int nNumber; int nData; int ntpye; }; int _tmain(void) { //不可作用指针,可能会引起访问冲突,char* pszStr指向不可写空间? //用于结构体、类等对象的初始化,很方便! char szStr[] = "this is a test!\n"; printf("szStr : %s\n",szStr); char szStr1[10]; memset(szStr1,0,10); printf("szStr1 :%s\n",szStr1); memset(szStr,'1',6); printf("szStr : %s\n",szStr); tObj Test[10]; memset(Test,0,sizeof(tObj)*10); printf("Test : %d %d %d\n",Test[0].nData,Test[0].nNumber,Test[0].ntpye); tObj _Obj; printf("Test : %d %d %d\n",_Obj.nData,_Obj.nNumber,_Obj.ntpye); memset(&_Obj,0,sizeof(tObj)); printf("Test : %d %d %d\n",_Obj.nData,_Obj.nNumber,_Obj.ntpye); getchar(); return 0; }二、关于字符串strcpy和memcpy函数原型:void *memcpy(void *dest, const void *src, size_t n);函数解释:从源src中所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。函数返回值:指向dest的指针作用:memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制。函数执行:
void *memcpy(void *memTo, const void *memFrom, size_t size) { if((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效 return NULL; char *tempFrom = (char *)memFrom; //保存memFrom首地址 char *tempTo = (char *)memTo; //保存memTo首地址 while(size -- > 0) //循环size次,复制memFrom的值到memTo中 *tempTo++ = *tempFrom++ ; return memTo; }简单操作示例:
int _tmain(int argc, _TCHAR* argv[]) { char szData[] = "This is a test!"; char szTemp[30]; memset(szTemp,'1',29); szTemp[30] = '\0'; //字符串没有结束符,效果很happy,可以去掉它试一试 memcpy(szTemp,szData,10); printf("%s",szTemp); getchar(); return 0; }关于strcpy函数原型:char* strcpy(char* dest,const char* src);函数解释:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。返回值:dest的指针函数典型
{
char* pszDestCpy = pszDest; while( (*pszDest++ = *pszSrc++) != '0'); return pszDestCpy; }strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。因此内部函数需要判断
char * strcpy(char * dest, const char * src) // 实现src到dest的复制 { if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性 { return NULL; } char *strdest = dest; //保存目标字符串的首地址 while ((*strDest++ = *strSrc++)!='\0'); //把src字符串的内容复制到dest下 return strdest; }strcpy和memcpy主要有三方面的不同:1、复制的内容不同,strcpy只复制字符串,memcpy复制的范围比较广,例如字符数组、整型、结构体、类等。2、复制的方法不同,strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以很容易溢出。memcpy根据他的第三个参数决定复制的长度。3、用途不同,一般字符串复制用strcpy,其他复制用memcpy。
相关文章推荐
- strcpy()、memcpy()、memmove()、memset()及其应用
- strcpy ,memcpy,memset比较
- memset,memcpy和strcpy的比较
- strcpy()、memcpy()与memset()的用法比较
- strcpy(), memcpy(), memmove(), memset()原型及应用
- strcpy()、memcpy()、memmove()、memset()及其应用
- strcpy()、memcpy()、memmove()、memset()及其应用
- strcpy()、memcpy()、memmove()、memset()的实现
- strcpy memcpy memset详解
- memcpy strcpy memset
- Memset memcpy Strcpy 函数使用
- memset ,memcpy 和strcpy 的根本区别?
- C的memset,memcpy,strcpy 的区别 及memset memcpy memmove源码
- strcpy、memcpy和memset的区别
- memset ,memcpy 和strcpy 的根本区别?
- memcpy,strcpy,memset,strcmp相关函数的用法
- C/C++面试常见的几个库函数详解(strcpy,memcpy,memset,atoi...)
- memcpy sprintf strcpy 的比较
- sprintf、strcpy 、memcpy 的比较
- c++ memset 、memcpy、strcpy、strlen、strcat、ASCII 问题