C言語におけるいくつかの重要な関数

4645 ワード

strcmp関数strcmpかんすう:比較文字列ひかくもじれつ

//C/C++  ,       ,        str1,str2,

// str1==str2,    ;

// str1str2,     。

int strcmp(const char* str1, const char* str2)
{

    while(*str1 == *str2 && *str1 != '\0')
    {
        ++str1;
        ++str2;
    }
    return *str1 - *str2;
}

 

strcpy :


//strcpy  src       '\0'           dest       ,       char*。
//strcpy       dst src      
char* strcpy(char *dst, const char *src) //const  ,     
{
    assert((src != NULL) && (dst != NULL)); //   0  
    char *pStr = dst; //  dst
    while ((*dst++ = *src++) != '\0') {}
    return pStr; //  dst,       
}

strlen:



unsigned int Strlen(const char * str)
{
	unsigned int length=0;
	assert(str!=NULL);
	while(str[length]!='\0')
	{
		length++;
	}
	return length;
}

strcat:


//dest         ,src        。
//strcat()      src          dest         ;
//dest        '\0'     ,                 '\0'。
//
//        dst           ,        

char* strcat(char* dst, const char* src)
{
    char* ret = dst;

    while(*dst != '\0')
        ++dst;

    while((*dst++ = *src) != '\0');
    return ret;
}

memcmp:


//     buffer1      buffer2    n        
int memcmp(const void *buffer1,const void *buffer2,int count)

{

   if (!count)

      return(0);

   while ( --count && *(char *)buffer1 == *(char *)buffer2)

   {

      buffer1 = (char *)buffer1 + 1;

        buffer2 = (char *)buffer2 + 1;

   }

   return( *((unsigned char *)buffer1) - *((unsigned char *)buffer2) );

}

 

memcpy:


//memcpy        src            
//    n      dest             。


void* my_memcpy(void* dst, const void* src, size_t n)
{
    char *tmp = (char*)dst;
    char *s_src = (char*)src;
 
    while(n--) {
        *tmp++ = *s_src++;
    }
    return dst;
}

 

memmove: ,


void* memmove(void* dst, const void* src, size_t n)
{
    char* s_dst;
    char* s_src;
    s_dst = (char*)dst;
    s_src = (char*)src;
    if(s_dst>s_src && (s_src+n>s_dst)) {     
        s_dst = s_dst+n-1;
        s_src = s_src+n-1;
        while(n--) {
            *s_dst-- = *s_src--;
        }
    }else {
        while(n--) {
            *s_dst++ = *s_src++;
        }
    }
    return dst;
}

 

memset:

 


//  memset     
//         
//                       


void * memset(void *s,int ch,size_t n)
{
	int i=0;
	while(i