文字列コピーstrcpyとmemcpy、および文字列比較関数strcmpを実現
1218 ワード
これらの関数は面接筆記試験に出やすいので、覚えておく必要がありますが、実は実現しやすいので、周到に考え、異常状況の判断に注意しなければなりません.
strcpyとmemcpyの違い:
(1)コピーされたコンテンツは異なり、strcpyは文字列しかコピーできないが、memcpyは任意のコンテンツをコピーできる.
(2)コピーの方法が異なり、strcpyは長さを指定する必要はありません.
(3)用途が異なり,文字列コピー時にstrcpyを用い,他のタイプのデータをコピーする場合にはmemcpyを用いるのが一般的である.
strcmp実装:
/*
*
* char*?( , strlen(strcpy(p,q) ))
*/
char* strcpy(char* strDest,const char* strSrc){
if(strDest==NULL||strSrc==NULL)
return NULL;
char* strDestCopy=strDest; //
while((*strDest++=*strSrc++)!='\0');
return strDestCopy;
}
/*
*
*/
#include
void* memcpy(void* memTo,const void* memFrom,size_t size){
assert((memTo!=NULL)&&(memFrom!=NULL)); //
char* tempTo=(char*)memTo;
char* tempFrom=(char*)memFrom;
while(size-->0){
*tempTo++=*tempFrom++;
}
return memTo;
}
strcpyとmemcpyの違い:
(1)コピーされたコンテンツは異なり、strcpyは文字列しかコピーできないが、memcpyは任意のコンテンツをコピーできる.
(2)コピーの方法が異なり、strcpyは長さを指定する必要はありません.
(3)用途が異なり,文字列コピー時にstrcpyを用い,他のタイプのデータをコピーする場合にはmemcpyを用いるのが一般的である.
strcmp実装:
int strcmp(const char* src,const char* dst){
assert((src!=NULL)&&(dst!=NULL));
while(*src!='\0'&&*dst!='\0'&&*src++==*dst++);
int ret=*src-*dst;
if(ret>0) return 1;
else if(ret==0) return 0;
else return -1;
}