点击(此处)折叠或打开
- void *memcpy(void *dest, const void *src, size_t count)
- {
- char *tmp = dest;
- const char *s = src;
- while (count--)
- *tmp++ = *s++;
- return dest;
- }
4.进程间实现互斥
5.获取一个文件的大小
6.tcp的三次握手
7.如何获取c中可变长函数参数的最后一个参数
8.string类的实现
9.Strcpy函数实现
点击(此处)折叠或打开
- char *my_strcpy(char *dst,const char *src)
- {
- assert(dst != NULL);
- assert(src != NULL);
- char *ret = dst;
- while((* dst++ = * src++) != '\0') ;
- return ret;
- }
点击(此处)折叠或打开
- char *strcat(char *strDes, const char *strSrc)
- {
- assert((strDes != NULL) && (strSrc != NULL));
- char *address = strDes;
- while (*strDes != ‘\0′)
- ++ strDes;
- while ((*strDes ++ = *strSrc ++) != ‘\0′)
- NULL;
- return address;
- }
点击(此处)折叠或打开
- char *strncat(char *strDes, const char *strSrc, int count)
- {
- assert((strDes != NULL) && (strSrc != NULL));
- char *address = strDes;
- while (*strDes != ‘\0′)
- ++ strDes;
- while (count — && *strSrc != ‘\0′ )
- *strDes ++ = *strSrc ++;
- *strDes = ‘\0′;
- return address;
- }
点击(此处)折叠或打开
- int strcmp(const char *str1,const char *str2)
- {
- /*不可用while(*str1++==*str2++)来比较,当不相等时仍会执行一次++,
- return返回的比较值实际上是下一个字符。应将++放到循环体中进行。*/
- while(*str1 == *str2)
- {
- if(*str1 == '\0')
- return0;
-
- str1++;
- str2++;
- }
- return *str1 - *str2;
- }
13.strncmp实现
点击(此处)折叠或打开
- int strncmp(const char *s, const char *t, int count)
- {
- assert((s != NULL) && (t != NULL));
- while (*s && *t && *s == *t && count –)
- {
- ++ s;
- ++ t;
- }
- return (*s – *t);
- }
点击(此处)折叠或打开
- /**********************
- *C语言标准库函数strcpy的一种典型的工业级的最简实现
- *返回值:目标串的地址。
- *对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。
- *参数:des为目标字符串,source为原字符串
- */
- char* strcpy(char* des,const char* source)
- {
- char* r=des;
- while((*(des++)=*(source++))!='\0');
- return r;
- }
- /*while((*des++=*source++));的解释:赋值表达式返回左操作数,所以在赋值NULL后,循环停止*/
15.strlen函数实现
点击(此处)折叠或打开
- int strlen(const char *str)
- {
- assert(str != NULL);
- int len = 0;
- while (*str ++ != ‘\0′)
- ++ len;
- return len;
- }
点击(此处)折叠或打开
- char * strpbrk(const char * cs,const char * ct)
- {
- const char *sc1,*sc2;
- for( sc1 = cs; *sc1 != '\0'; ++sc1)
- {
- for( sc2 = ct; *sc2 != '\0'; ++sc2)
- {
- if (*sc1 == *sc2)
- {
- return (char *) sc1;
- }
- }
- }
- return NULL;
- }
17.strstr函数实现
点击(此处)折叠或打开
- char *strstr(const char *s1,const char *s2)
- {
- int len2;
- if(!(len2=strlen(s2)))//此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误
- return(char*)s1;
- for(;*s1;++s1)
- {
- if(*s1==*s2 && strncmp(s1,s2,len2)==0)
- return(char*)s1;
- }
- return NULL;
- }
18.string实现
点击(此处)折叠或打开
- 已知String原型为:
- class String
- {
- public:
- //普通构造函数
- String(const char *str = NULL)
- //拷贝构造函数
- String(const String &other)
- //析构函数
- ~String(void);
- //赋值函数
- String & operator=(String &other) //oh,原题目打错了,string可是一个关键字
- private:
- char* m_str;
- unsigned m_uCount;
- };
- 分别实现以上四个函数
- //普通构造函数
- String::String(const char* str)
- {
- if(str==NULL) //如果str为NULL,存空字符串
- {
- m_str = new char[1]; //分配一个字节
- *m_str = ‘\0′; //赋一个’\0′
- }else
- {
- m_str = new char[strlen(str) + 1];//分配空间容纳str内容
- strcpy(m_str, str); //复制str到私有成员m_str中
- }
- }
- //析构函数
- String::~String()
- {
- if(m_str!=NULL) //如果m_str不为NULL,释放堆内存
- {
- delete [] m_str;
- m_str = NULL;
- }
- }
- //拷贝构造函数
- String::String(const String &other)
- {
- m_str = new char[strlen(other.m_str)+1]; //分配空间容纳str内容
- strcpy(m_str, other.m_str); //复制other.m_str到私有成员m_str中
- }
- //赋值函数
- String & String::operator=(String &other)
- {
- if(this == &other) //若对象与other是同一个对象,直接返回本身
- {
- return *this
- }
- delete [] m_str; //否则,先释放当前对象堆内存
- m_str = new char[strlen(other.m_str)+1]; //分配空间容纳str内容
- strcpy(m_str, other.m_str); //复制other.m_str到私有成员m_str中
- return *this;
- }
19.c++函数底层调用过程