1、strcpy

 #include<stdio.h>
#include<assert.h> char *mystrcpy(char *dest, const char *src)
{
assert((dest != NULL) && (src != NULL)); char *res = dest;
while ((*dest++ = *src++) != '\0'); return res;
} int main()
{
char *src = "";
char dest[];
printf("%s\n", src);
char *res = mystrcpy(dest, src);
printf("%s\n", res); return ;
}

2、strncpy

 #include<stdio.h>
#include<assert.h> char* mystrncpy(char *dest, const char *src, size_t size)
{
assert((dest != NULL) && (src != NULL)); char *res = dest;
int i = ;
while (((*dest++ = *src++) != '\0') && (i++<size)); *(res + size) = '\0'; return res;
} int main()
{
char *src = "";
printf("%s\n", src);
char dest[];
char *res = mystrncpy(dest, src, );
printf("%s\n", res); return ;
}

3、strlen

(1)非递归实现

 #include<stdio.h>
#include<assert.h> int mystrlen(const char *str)
{
assert(str != NULL); int len = ;
while ((*str++) != '\0')
++len; return len;
} int main()
{
char *str = "";
int len = mystrlen(str);
printf("%d\n", len); return ;
}

(2)递归实现

 #include<stdio.h>
#include<assert.h> int strlenRecur(const char *str)
{
if (str == NULL || *str == '\0')
return ;
return strlenRecur(str + ) + ;
} int main()
{
char *str = "";
int len = strlenRecur(str);
printf("%d\n", len); return ;
}

4、memcpy

memcpy 和 strncpy 最大的区别是 memcpy不会遇到 '\0' 结束拷贝 。

(1)version1(不能解决数据区重叠问题):

 #include<stdio.h>
#include<assert.h> char* mymemcpy1(char *dest, const char *src, size_t size)
{
assert((dest != NULL) && (src != NULL)); char *res = dest;
while (size)
{
*(dest++) = *(src++);
--size;
}
*(dest + size) = '\0'; return res;
} int main()
{
char *src = "";
char dest[];
char *res = mymemcpy1(dest, src,);
printf("%s\n", res); return ;
}

(2)version2(解决了数据区重叠问题):

 #include<stdio.h>
#include<assert.h> char *mymemcpy2(char *dest, const char *src, size_t size)
{
assert((dest != NULL) && (src != NULL));
char *res = dest; if (dest > src&&dest < (src + size))
{
dest = dest + size - ;
src = src + size - ;
while (size--)
*dest-- = *src--;
}
else
while (size--)
*dest++ = *src++;
*(dest + size) = '\0'; return res;
} int main()
{
char *src = "";
char dest[];
char *res = mymemcpy2(dest, src,);
printf("%s\n", res); return ;
}

5、memset

 #include<stdio.h>
#include<assert.h> void *mymemset(void *buf, const char c, size_t size)
{
assert(buf != NULL);
char *res = (char*)buf;
char *str = res;
while (size--)
*str++ = c; return res;
} int main()
{
char *src = "";
printf("%s\n", src);
char dest[];
void *buf = (char*)dest;
char *res = (char *)(mymemset(buf, 'a', ));
printf("%s\n", res); return ;
}

6、strcat

 #include<stdio.h>
#include<assert.h> char *mystrcat(char *dest, const char *src)
{
assert((dest != NULL) && (src != NULL));
char *res=dest;
while (*dest != '\0')
++dest;
while (*src != '\0')
*dest++ = *src++; return res;
} int main()
{
char dest[] = "";
char *src = "abc";
char *res = mystrcat(dest, src);
printf("%s\n", res); return ;
}

7、strncat

 #include<stdio.h>
#include<assert.h> char *mystrncat(char *dest, const char *src,size_t size)
{
assert((dest != NULL) && (src != NULL));
char *res=dest;
while (*dest != '\0')
++dest;
while ((*src != '\0')&&(size--))
*dest++ = *src++;
*dest = '\0'; return res;
} int main()
{
char dest[] = "";
char *src = "abcdef";
char *res = mystrncat(dest, src,);
printf("%s\n", res); return ;
}

8、strcmp

 #include<stdio.h>
#include<assert.h> int mystrcmp(const char *str1, const char *str2)
{
assert((str1 != NULL) && (str2 != NULL));
while (*str1&&*str2 && (*str1++ == *str2++)); return (*str1 - *str2);
} int main()
{
char *str1 = "abcde";
char *str2 = "abdf";
int res = mystrcmp(str1, str2);
printf("%d\n", res); return ;
}

9、strncmp

 #include<stdio.h>
#include<assert.h> int mystrncmp(const char *str1, const char *str2,size_t size)
{
assert((str1 != NULL) && (str2 != NULL));
while (*str1&&*str2 && (*str1++ == *str2++)&&size--); return (*str1 - *str2);
} int main()
{
char *str1 = "abcde";
char *str2 = "abdfsd";
int res = mystrncmp(str1, str2,);
printf("%d\n", res); return ;
}

10、strchr

 #include<stdio.h>
#include<assert.h> char *mystrchr(const char *str, char c)
{
assert(str != NULL);
while (*str != '\0' && (*str != c))
++str; if (*str == c)
return (char*)str;
else
return NULL;
} int main()
{
char *str = "abcde";
char *res = mystrchr(str,'c');
printf("%s\n", res); return ;
}

最新文章

  1. C#进阶系列——MEF实现设计上的“松耦合”(一)
  2. [Head First设计模式]生活中学设计模式——状态模式
  3. 【luogu】 P1433 吃奶酪
  4. sikuli实战记录
  5. 第二章 时间控件(DateTime Picker)
  6. itellyou MSDN, 我告诉你 win7系统工具等
  7. ionic2 页面加载时图片添加的问题
  8. 算法 - 求和为n的连续正整数序列(C++)
  9. mac上做透明图片, png, alpha
  10. Android之如何混淆代码和相关配置
  11. 如何正确的使用uwsgi
  12. POJ 3630 , HDU 1671 Phone List - from lanshui_Yang
  13. css ie6最小高度问题
  14. Ansible进阶--playbook的使用
  15. Project support for both iOS 6 and iOS 7
  16. 访问arcserver中的featureServer服务
  17. phpstorm连接服务器,实时编辑上传文件到服务器
  18. 百度云虚拟主机配置 Thinkphp5.1
  19. Linux系统监控命令及定位Java线程
  20. laravel Schema 查看索引是否存在

热门文章

  1. 实用的原生js图片轮播
  2. [转]升级Flash Builder 4.6中的Flash Player版本
  3. WPF Invoke与BeginInvoke的区别
  4. 网络编程之socket编程
  5. assert.equal()
  6. 6.7 使用IDEA导入工程
  7. 7.30实习培训日志-SQL优化
  8. hdu1063
  9. Note: Eleos: ExitLess OS Services for SGX Enclaves
  10. cinder 服务启动与请求流程源码分析