Uso e implementación de codificación de funciones de cadena strlen(), strcat(), strcpy(), strcmp() y funciones de operación de memoria memset(), memcpy(), memcmp(), memmove() en lenguaje C

El uso y la codificación de las funciones de cadena strlen(), strcat(), strcpy(), strcmp() y las funciones de operación de memoria memset(), memcpy(), memcmp(), memmove() en lenguaje c para realizar la función que comienza con str
, El objeto de la operación es una cadena, y la función que comienza con mem es la memoria
1. La función strlen ()
encuentra la longitud efectiva de la cadena, excluyendo '\0'
. La realización de la función strlen ():
#include
#include
#include
size_t mystrlen(char *str)
{ afirme (
   ste!= NULL);
   const char*p = str;
   size_t count = 0;
   while(*p++ != '\0')
   {
      count++;
   } return
   count; Calcular el número de caracteres size_t mystrlen(char *str) {
   




  afirmar(str != NULL);
  if(*str == '\0')
    devuelve 0;
  else
  devuelve mystrlen(str+1)+1;
}
2. strcat() función de conexión de cadena
strcat(s1, s2) put The la cadena s2 está conectada a la parte posterior de s1, preste atención para asegurarse de que s1 tenga suficiente espacio
para implementar la función:
char *mystrcat(char *strD, const char *strS)
{
   assert(strD!=NULL&&strS!=NULL);
   char *pD = strD;
   const char *pS = strS;
   while(*pD != '\0')
  {
     pD++;
   }
   while(*pS != '\0')
   {*pD++ = *pS++;}
   *pD = ' \0';
   return strD;
}
3. Función de copia de cadena strcpy()
strcpy (s1, s2) copia la cadena s2 a s1
char *mystrcpy(char *strD,const char *strS)
{
   assert(strD != NULL&&strS !=NULL);
   char *pD = strD;
   const char *pS = strS ;
   while (*pS !='\0')
   {*pD++ = *pS++;}
   *pD = '\0';
   return strD;
}
4. función de comparación de cadenas strcmp()
int mystrcmp(const char *str1, const char *str2 )
{
  afirme(str1 != NULL&& str2 != NULL);
  const char *pstr1 = str1;
  const char *pstr2 = str2;
  int resultado = 0;
  while(*pstr != '\0'||*pstr2 != ' \0')
  { 
     resultado = *pstr1 - *pstr2;
     if(result != 0)
     {break;}
      pstr1++;
      pstr2++;    
  }
  if(result > 0)
  result = 1;
  else if(result < 0)
  result = -1;
  return result;
}
5. configuración de memoria memset() o initialize function
int array[10];
memset(array, 0, sizeof(int)*10);
array array inicializado con 0
void *mymemset(void *dest, int c, size_t count)
{
   assert(dest != NULL);
   char *p = (char *)dest;
   while(count-- >0)
  {*p++ = c;}
   return dest;
}
6. Función de copia de memoria memcpy()
La función de copia de memoria no solo puede copiar cadenas, sino que, al igual que la función strcpy(), puede copiar cualquier tipo de objeto Implementación
de la función : evite sobrescribir void *mymemcpy(void *dest,const    void
*src,size_t count)
{
! = NULL||src != NULL);
   char *pD = (char *)dest;
   const char *pS = (const char*)src;
   if(pD>=pD||pD>=pS+count)
  {
    while (contador--)
    {*pD++ = *pS++;}
  }
  else
  {
    while(contador-- > 0)
    {*(pD+contador)=*(pS+contador)} }
  return
  dest;
}
7. memoria memcmp() función de comparación
int mymemcmp(const void *buf1, const void *buf2, size_t count)
{
  afirmar(buf1 != NULL || buf2 != NULL)
  const char *pbuf1 = (const char *)buf1;
  const char *pbuf2 = (const char *)buf2;
  resolución interna = 0;
  while(count-- > 0)
  {
    if((res = *pbuf++ - *pbuf2++)!=0)
    {break;}
    if(res> 0)
    {res = 1;}
    if(res < 0)
    {res = - 1;}
    volver res;
  }
}
8、memmove()内存移动函数
函数实现
void *mymemmove(void *dest,const void *src,size_t count)
{
  assert(dest != NULL || src != NULL);
  char *pD = (char *)dest;
  const char *pS = (const char*)src;
  if(pS >= pD||pD>=pS+count)
  {
     while(count-- >0)
     {*pD++ = *pS++;}
  }
  else
  {
    while(count-- >0)
    {*(pD+count)=*(pS+count);}
  }
  return dest;
}

















Supongo que te gusta

Origin blog.csdn.net/liujing_sy/article/details/76273855
Recomendado
Clasificación