strcpy、strncpy、strlen、memcpy、memset、strcat、strncat、strcmp、strncmp,strchr
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 ;
- }
strcpy、strncpy、strlen、memcpy、memset、strcat、strncat、strcmp、strncmp,strchr的更多相关文章
- strcpy、strncpy与memcpy的区别与使用方法
strcpy.strncpy.memcpy这三个C语言函数我们在主机代码编写中会很频繁的使用到,但是三个函数的区别.使用时该注意什么还是有必要说下的. 本文参考<C 标准库>编写. 一.函 ...
- strcpy、strncpy、memcpy的区别
一.strcpy.strncpy区别 struct gpInfo { char gpcode[9]; char gpName[50]; }; string gpstr = "SZ000001 ...
- 不使用库函数、自己编写的(strlen、strcpy、strcmp、strcat、memcmp、memcpy、memmove)
不使用库函数.自己编写的(strlen.strcpy.strcmp.strcat.memcmp.memcpy.memmove) //求字符串长度的函数 int my_strlen(const char ...
- 码海拾遗:strcpy()、strncpy()和strcpy_s()区别
1.strcpy() 原型:char *strcpy(char *dst,const char *src) 功能:将以src为首地址的字符串复制到以dst为首地址的字符串,包括'\0'结束符,返回ds ...
- strcpy、strncpy 和安全的strncpy_s
strcpy和strncpy摘于linux 内核源码的/lib/string.c char *self_strcpy(char *dest, const char *src) { char *tmp ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- 二十六、【开源框架】EFW框架Winform前端开发之Grid++Report报表、条形码、Excel导出、图表控件
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
- java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.uti ...
- BAT线下战争:巨额投资或培养出自己最大对手(包括美团、58、饿了么在内的公司都在计划推出自己的支付工具和金融产品,腾讯只做2不做O)
BAT线下战争:巨额投资或培养出自己最大对手 2015年10月12日09:49 <财经>杂志 我有话说(18人参与) 收藏本文 BAT大举投资线下公司,看似咄咄逼人 ...
随机推荐
- HDU1042(N!:设4为基数)
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submi ...
- puppet插件fact和hiera(puppet自动化系列3)
四.Fact插件 4.1 使用pluginsync进行发布 这种方法比较特殊,节点factpath目录里除了编写好的rb文件之外,还需要在puppet模块中引用,运行一次之后才会转换成fact.通常在 ...
- openstackM版本安装
部署期间常见问题:http://www.cnblogs.com/bfmq/p/6001233.html,问题跟对架构的理解永远比部署重要!你玩技术是绝对是要基于理论的 一.基本情况:物理设备:4台惠普 ...
- Makefile经典教程
转自:http://blog.csdn.net/ruglcc/article/details/7814546/ makefile很重要 什么是makefile?或许很多Winodws的程序 ...
- %.*s, printf
%.*s_百度搜索 c语言%.*s是什么_百度知道 *用来指定宽度,对应一个整数 .(点)与后面的数合起来 是指定必须输出这个宽度,如果所输出的字符串长度大于这个数,则按此宽度输出,如果小于,则输出实 ...
- Java探索之旅(11)——抽象类与接口
1.Java数据类型 ❶不可变类,是指当创建了这个类的实例后,就不允许修改它的属性值. 它包括: Primitive变量:boolean,byte, char, doubl ...
- [51nod1384]全排列
法一:next_permutation函数,两个参数分别为起始指针和末尾指针. #include<bits/stdc++.h> using namespace std; typedef l ...
- layui 文件上传加进度条
1.页面 <div class="layui-row layui-col-space5"> <div class="layui-form-item&qu ...
- R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等
################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方 ...
- 31、NGS 常用分析软件
转载:http://www.zilhua.com/2081.html 参考资料:http://bioinfo.mc.vanderbilt.edu/NGS/software.htm 1. Mapping ...