1.memcopy函数的实现


点击(此处)折叠或打开

  1. void *memcpy(void *dest, const void *src, size_t count)
  2. {
  3.  char *tmp = dest;
  4.  const char *s = src;

  5.  while (count--)
  6.   *tmp++ = *s++;
  7.  return dest;
  8. }
2.c的结构体中,实现一字节对齐


3.进程的通讯方式
4.进程间实现互斥
5.获取一个文件的大小
6.tcp的三次握手
7.如何获取c中可变长函数参数的最后一个参数
8.string类的实现
9.Strcpy函数实现

点击(此处)折叠或打开

  1. char *my_strcpy(char *dst,const char *src)
  2.  {
  3.       assert(dst != NULL);
  4.       assert(src != NULL);
  5.       char *ret = dst;
  6.       while((* dst++ = * src++) != '\0') ;
  7.       return ret;
  8.  }
10.strcat函数的实现

点击(此处)折叠或打开

  1. char *strcat(char *strDes, const char *strSrc)

  2. {

  3. assert((strDes != NULL) && (strSrc != NULL));

  4. char *address = strDes;

  5. while (*strDes != ‘\0′)

  6. ++ strDes;

  7. while ((*strDes ++ = *strSrc ++) != ‘\0′)

  8. NULL;

  9. return address;

  10. }
11.strncat实现

点击(此处)折叠或打开

  1. char *strncat(char *strDes, const char *strSrc, int count)

  2. {

  3. assert((strDes != NULL) && (strSrc != NULL));

  4. char *address = strDes;

  5. while (*strDes !=\0′)

  6. ++ strDes;

  7. while (count — && *strSrc !=\0′ )

  8. *strDes ++ = *strSrc ++;

  9. *strDes =\0′;

  10. return address;

  11. }
12.strcmp函数实现

点击(此处)折叠或打开

  1. int strcmp(const char *str1,const char *str2)
  2. {
  3.     /*不可用while(*str1++==*str2++)来比较,当不相等时仍会执行一次++
  4.     return返回的比较值实际上是下一个字符。应将++放到循环体中进行。*/
  5.     while(*str1 == *str2)
  6.     {
  7.         if(*str1 == '\0')
  8.             return0;
  9.          
  10.         str1++;
  11.         str2++;
  12.     }
  13.     return *str1 - *str2;
  14. }

13.strncmp实现

点击(此处)折叠或打开

  1. int strncmp(const char *s, const char *t, int count)
  2. {
  3.     assert((s != NULL) && (t != NULL));
  4.     while (*s && *t && *s == *t && count –)
  5.     {
  6.         ++ s;
  7.         ++ t;
  8.     }
  9.     return (*s – *t);
  10. }
14.strcpy实现

点击(此处)折叠或打开

  1. /**********************
  2. *C语言标准库函数strcpy的一种典型的工业级的最简实现
  3. *返回值:目标串的地址。
  4. *对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。
  5. *参数:des为目标字符串,source为原字符串
  6. */
  7.  char* strcpy(char* des,const char* source)
  8.  {
  9.  char* r=des;
  10.  while((*(des++)=*(source++))!='\0');
  11.  return r;
  12.  }
  13.  /*while((*des++=*source++));的解释:赋值表达式返回左操作数,所以在赋值NULL后,循环停止*/

15.strlen函数实现

点击(此处)折叠或打开

  1. int strlen(const char *str)
  2. {
  3.     assert(str != NULL);
  4.     int len = 0;
  5.     while (*str ++ != ‘\0′)
  6.         ++ len;
  7.     return len;
  8. }
16.strpbrk函数实现

点击(此处)折叠或打开

  1. char * strpbrk(const char * cs,const char * ct)
  2. {
  3.     const char *sc1,*sc2;
  4.     for( sc1 = cs; *sc1 != '\0'; ++sc1)
  5.     {
  6.         for( sc2 = ct; *sc2 != '\0'; ++sc2)
  7.         {
  8.             if (*sc1 == *sc2)
  9.             {
  10.                 return (char *) sc1;
  11.             }
  12.         }
  13.     }
  14.     return NULL;
  15. }

17.strstr函数实现

点击(此处)折叠或打开

  1. char *strstr(const char *s1,const char *s2)
  2. {
  3.  int len2;
  4.  if(!(len2=strlen(s2)))//此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误
  5.   return(char*)s1;
  6.  for(;*s1;++s1)
  7.  {
  8.      if(*s1==*s2 && strncmp(s1,s2,len2)==0)
  9.      return(char*)s1;
  10.  }
  11.  return NULL;
  12. }

18.string实现

点击(此处)折叠或打开

  1. 已知String原型为:

  2. class String

  3. {

  4. public:

  5. //普通构造函数

  6. String(const char *str = NULL)

  7. //拷贝构造函数

  8. String(const String &other)

  9. //析构函数

  10. ~String(void);

  11. //赋值函数

  12. String & operator=(String &other) //oh,原题目打错了,string可是一个关键字

  13. private:

  14. char* m_str;

  15. unsigned m_uCount;

  16. };

  17. 分别实现以上四个函数

  18. //普通构造函数

  19. String::String(const char* str)

  20. {

  21.     if(str==NULL) //如果str为NULL,存空字符串

  22. {

  23.         m_str = new char[1]; //分配一个字节

  24.         *m_str = ‘\0′; //赋一个’\0′

  25. }else

  26.     {

  27.         m_str = new char[strlen(str) + 1];//分配空间容纳str内容

  28.         strcpy(m_str, str); //复制str到私有成员m_str中

  29.     }

  30. }

  31. //析构函数

  32. String::~String()

  33. {

  34.     if(m_str!=NULL) //如果m_str不为NULL,释放堆内存

  35. {

  36.         delete [] m_str;

  37.         m_str = NULL;

  38. }

  39. }

  40. //拷贝构造函数

  41. String::String(const String &other)

  42. {

  43.     m_str = new char[strlen(other.m_str)+1]; //分配空间容纳str内容

  44.     strcpy(m_str, other.m_str); //复制other.m_str到私有成员m_str中

  45. }

  46. //赋值函数

  47. String & String::operator=(String &other)

  48. {

  49.     if(this == &other) //若对象与other是同一个对象,直接返回本身

  50. {

  51.         return *this

  52. }

  53.     delete [] m_str; //否则,先释放当前对象堆内存

  54.     m_str = new char[strlen(other.m_str)+1]; //分配空间容纳str内容

  55.     strcpy(m_str, other.m_str); //复制other.m_str到私有成员m_str中

  56.     return *this;

  57. }

19.c++函数底层调用过程





09-05 09:41