1、strcpy

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. char *mystrcpy(char *dest, const char *src)
  5. {
  6. assert((dest != NULL) && (src != NULL));
  7.  
  8. char *res = dest;
  9. while ((*dest++ = *src++) != '\0');
  10.  
  11. return res;
  12. }
  13.  
  14. int main()
  15. {
  16. char *src = "";
  17. char dest[];
  18. printf("%s\n", src);
  19. char *res = mystrcpy(dest, src);
  20. printf("%s\n", res);
  21.  
  22. return ;
  23. }

2、strncpy

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. char* mystrncpy(char *dest, const char *src, size_t size)
  5. {
  6. assert((dest != NULL) && (src != NULL));
  7.  
  8. char *res = dest;
  9. int i = ;
  10. while (((*dest++ = *src++) != '\0') && (i++<size));
  11.  
  12. *(res + size) = '\0';
  13.  
  14. return res;
  15. }
  16.  
  17. int main()
  18. {
  19. char *src = "";
  20. printf("%s\n", src);
  21. char dest[];
  22. char *res = mystrncpy(dest, src, );
  23. printf("%s\n", res);
  24.  
  25. return ;
  26. }

3、strlen

(1)非递归实现

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. int mystrlen(const char *str)
  5. {
  6. assert(str != NULL);
  7.  
  8. int len = ;
  9. while ((*str++) != '\0')
  10. ++len;
  11.  
  12. return len;
  13. }
  14.  
  15. int main()
  16. {
  17. char *str = "";
  18. int len = mystrlen(str);
  19. printf("%d\n", len);
  20.  
  21. return ;
  22. }

(2)递归实现

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. int strlenRecur(const char *str)
  5. {
  6. if (str == NULL || *str == '\0')
  7. return ;
  8. return strlenRecur(str + ) + ;
  9. }
  10.  
  11. int main()
  12. {
  13. char *str = "";
  14. int len = strlenRecur(str);
  15. printf("%d\n", len);
  16.  
  17. return ;
  18. }

4、memcpy

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

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

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. char* mymemcpy1(char *dest, const char *src, size_t size)
  5. {
  6. assert((dest != NULL) && (src != NULL));
  7.  
  8. char *res = dest;
  9. while (size)
  10. {
  11. *(dest++) = *(src++);
  12. --size;
  13. }
  14. *(dest + size) = '\0';
  15.  
  16. return res;
  17. }
  18.  
  19. int main()
  20. {
  21. char *src = "";
  22. char dest[];
  23. char *res = mymemcpy1(dest, src,);
  24. printf("%s\n", res);
  25.  
  26. return ;
  27. }

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

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. char *mymemcpy2(char *dest, const char *src, size_t size)
  5. {
  6. assert((dest != NULL) && (src != NULL));
  7. char *res = dest;
  8.  
  9. if (dest > src&&dest < (src + size))
  10. {
  11. dest = dest + size - ;
  12. src = src + size - ;
  13. while (size--)
  14. *dest-- = *src--;
  15. }
  16. else
  17. while (size--)
  18. *dest++ = *src++;
  19. *(dest + size) = '\0';
  20.  
  21. return res;
  22. }
  23.  
  24. int main()
  25. {
  26. char *src = "";
  27. char dest[];
  28. char *res = mymemcpy2(dest, src,);
  29. printf("%s\n", res);
  30.  
  31. return ;
  32. }

5、memset

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. void *mymemset(void *buf, const char c, size_t size)
  5. {
  6. assert(buf != NULL);
  7. char *res = (char*)buf;
  8. char *str = res;
  9. while (size--)
  10. *str++ = c;
  11.  
  12. return res;
  13. }
  14.  
  15. int main()
  16. {
  17. char *src = "";
  18. printf("%s\n", src);
  19. char dest[];
  20. void *buf = (char*)dest;
  21. char *res = (char *)(mymemset(buf, 'a', ));
  22. printf("%s\n", res);
  23.  
  24. return ;
  25. }

6、strcat

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. char *mystrcat(char *dest, const char *src)
  5. {
  6. assert((dest != NULL) && (src != NULL));
  7. char *res=dest;
  8. while (*dest != '\0')
  9. ++dest;
  10. while (*src != '\0')
  11. *dest++ = *src++;
  12.  
  13. return res;
  14. }
  15.  
  16. int main()
  17. {
  18. char dest[] = "";
  19. char *src = "abc";
  20. char *res = mystrcat(dest, src);
  21. printf("%s\n", res);
  22.  
  23. return ;
  24. }

7、strncat

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. char *mystrncat(char *dest, const char *src,size_t size)
  5. {
  6. assert((dest != NULL) && (src != NULL));
  7. char *res=dest;
  8. while (*dest != '\0')
  9. ++dest;
  10. while ((*src != '\0')&&(size--))
  11. *dest++ = *src++;
  12. *dest = '\0';
  13.  
  14. return res;
  15. }
  16.  
  17. int main()
  18. {
  19. char dest[] = "";
  20. char *src = "abcdef";
  21. char *res = mystrncat(dest, src,);
  22. printf("%s\n", res);
  23.  
  24. return ;
  25. }

8、strcmp

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. int mystrcmp(const char *str1, const char *str2)
  5. {
  6. assert((str1 != NULL) && (str2 != NULL));
  7. while (*str1&&*str2 && (*str1++ == *str2++));
  8.  
  9. return (*str1 - *str2);
  10. }
  11.  
  12. int main()
  13. {
  14. char *str1 = "abcde";
  15. char *str2 = "abdf";
  16. int res = mystrcmp(str1, str2);
  17. printf("%d\n", res);
  18.  
  19. return ;
  20. }

9、strncmp

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. int mystrncmp(const char *str1, const char *str2,size_t size)
  5. {
  6. assert((str1 != NULL) && (str2 != NULL));
  7. while (*str1&&*str2 && (*str1++ == *str2++)&&size--);
  8.  
  9. return (*str1 - *str2);
  10. }
  11.  
  12. int main()
  13. {
  14. char *str1 = "abcde";
  15. char *str2 = "abdfsd";
  16. int res = mystrncmp(str1, str2,);
  17. printf("%d\n", res);
  18.  
  19. return ;
  20. }

10、strchr

  1. #include<stdio.h>
  2. #include<assert.h>
  3.  
  4. char *mystrchr(const char *str, char c)
  5. {
  6. assert(str != NULL);
  7. while (*str != '\0' && (*str != c))
  8. ++str;
  9.  
  10. if (*str == c)
  11. return (char*)str;
  12. else
  13. return NULL;
  14. }
  15.  
  16. int main()
  17. {
  18. char *str = "abcde";
  19. char *res = mystrchr(str,'c');
  20. printf("%s\n", res);
  21.  
  22. return ;
  23. }

strcpy、strncpy、strlen、memcpy、memset、strcat、strncat、strcmp、strncmp,strchr的更多相关文章

  1. strcpy、strncpy与memcpy的区别与使用方法

    strcpy.strncpy.memcpy这三个C语言函数我们在主机代码编写中会很频繁的使用到,但是三个函数的区别.使用时该注意什么还是有必要说下的. 本文参考<C 标准库>编写. 一.函 ...

  2. strcpy、strncpy、memcpy的区别

    一.strcpy.strncpy区别 struct gpInfo { char gpcode[9]; char gpName[50]; }; string gpstr = "SZ000001 ...

  3. 不使用库函数、自己编写的(strlen、strcpy、strcmp、strcat、memcmp、memcpy、memmove)

    不使用库函数.自己编写的(strlen.strcpy.strcmp.strcat.memcmp.memcpy.memmove) //求字符串长度的函数 int my_strlen(const char ...

  4. 码海拾遗:strcpy()、strncpy()和strcpy_s()区别

    1.strcpy() 原型:char *strcpy(char *dst,const char *src) 功能:将以src为首地址的字符串复制到以dst为首地址的字符串,包括'\0'结束符,返回ds ...

  5. strcpy、strncpy 和安全的strncpy_s

    strcpy和strncpy摘于linux 内核源码的/lib/string.c char *self_strcpy(char *dest, const char *src) { char *tmp ...

  6. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  7. 二十六、【开源框架】EFW框架Winform前端开发之Grid++Report报表、条形码、Excel导出、图表控件

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...

  8. java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.uti ...

  9. BAT线下战争:巨额投资或培养出自己最大对手(包括美团、58、饿了么在内的公司都在计划推出自己的支付工具和金融产品,腾讯只做2不做O)

    BAT线下战争:巨额投资或培养出自己最大对手 2015年10月12日09:49   <财经>杂志    我有话说(18人参与) 收藏本文        BAT大举投资线下公司,看似咄咄逼人 ...

随机推荐

  1. HDU1042(N!:设4为基数)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submi ...

  2. puppet插件fact和hiera(puppet自动化系列3)

    四.Fact插件 4.1 使用pluginsync进行发布 这种方法比较特殊,节点factpath目录里除了编写好的rb文件之外,还需要在puppet模块中引用,运行一次之后才会转换成fact.通常在 ...

  3. openstackM版本安装

    部署期间常见问题:http://www.cnblogs.com/bfmq/p/6001233.html,问题跟对架构的理解永远比部署重要!你玩技术是绝对是要基于理论的 一.基本情况:物理设备:4台惠普 ...

  4. Makefile经典教程

    转自:http://blog.csdn.net/ruglcc/article/details/7814546/       makefile很重要 什么是makefile?或许很多Winodws的程序 ...

  5. %.*s, printf

    %.*s_百度搜索 c语言%.*s是什么_百度知道 *用来指定宽度,对应一个整数 .(点)与后面的数合起来 是指定必须输出这个宽度,如果所输出的字符串长度大于这个数,则按此宽度输出,如果小于,则输出实 ...

  6. Java探索之旅(11)——抽象类与接口

    1.Java数据类型       ❶不可变类,是指当创建了这个类的实例后,就不允许修改它的属性值. 它包括:         Primitive变量:boolean,byte, char, doubl ...

  7. [51nod1384]全排列

    法一:next_permutation函数,两个参数分别为起始指针和末尾指针. #include<bits/stdc++.h> using namespace std; typedef l ...

  8. layui 文件上传加进度条

    1.页面 <div class="layui-row layui-col-space5"> <div class="layui-form-item&qu ...

  9. R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等

    ################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方 ...

  10. 31、NGS 常用分析软件

    转载:http://www.zilhua.com/2081.html 参考资料:http://bioinfo.mc.vanderbilt.edu/NGS/software.htm 1. Mapping ...