strcpy與memcpy的區別
strcpy和memcpy都是標準C庫函式,它們有下面的特點。
strcpy提供了字串的複製。即strcpy只用於字串複製,並且它不僅複製字串內容之外,還會複製字串的結束符。
已知strcpy函式的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般記憶體的複製。即memcpy對於需要複製的內容沒有限制,因此用途更廣。
void *memcpy( void *dest, const void *src, size_t count );
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;
}
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;
}
|
strcpy和memcpy主要有以下3方面的區別。
1、複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。
2、複製的方法不同。strcpy不需要指定長度,它遇到被複制字元的串結束符"\0"才結束,所以容易溢位。memcpy則是根據其第3個引數決定複製的長度。
3、用途不同。通常在複製字串時用strcpy,而需要複製其他型別資料時則一般用memcpy
相關文章
- strcpy函式和memcpy函式的區別函式memcpy
- memset()&&memcpy&&strcpymemcpy
- strcpy,strncpy,memcpy,memmove,memset函式memcpy函式
- memmove和memcpy 以及strcmp strcpy幾個庫函式的實現memcpy函式
- memmove和memcpy函式的區別及實現memcpy函式
- ??與?:的區別
- memcpymemcpy
- MySQL的@與@@區別MySql
- mybatis #與$的區別MyBatis
- Null 與 “” 的區別Null
- &與&&, |與||區別
- in與exist , not in與not exist 的區別
- memcpy,memmove的實現memcpy
- CentOS 與 Ubuntu 的區別CentOSUbuntu
- artice與section的區別
- GET 與 POST 的區別
- WebSocket 與 Socket 的區別Web
- Postgresql與MySQL的區別MySql
- chown與chmod的區別
- LESS與SASS的區別
- free 與 CFRelease 的區別
- gulp與webpack的區別Web
- @Autowired 與@Resource的區別
- let與var的區別
- post與get的區別
- HashSet與HashMap的區別HashMap
- maven與ant的區別Maven
- __new()__ 與 __init()__的區別
- TCP與UDP的區別TCPUDP
- Mysql與mongodb的區別MySqlMongoDB
- typedef與define的區別
- Eureka與Zookeeper的區別
- buffer與cache的區別
- async與defer的區別
- synchronized與Lock的區別synchronized
- kill與pkill的區別
- int與Integer的區別
- HTML與XHTML的區別HTML