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的更多相关文章

  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. bzoj 3730 震波 —— 动态点分治+树状数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3730 建点分树,每个点记两个树状数组,存它作为重心管辖的范围内,所有点到它的距离情况和到它在 ...

  2. Docker容器里的进程为什么要前台运行

    <第一本Docker书>里面,讲到Docker容器启动web服务时,都指定了前台运行的参数,例如apache: ENTRYPOINT [ "/usr/sbin/apache2&q ...

  3. SharePoint Project Server List 列表CURD操作使用rest api接口

    //#region 界面交互代码 var issuesUtils = issuesUtils || {}; (function () { /** * 点击问题提处理方案按钮事件 */ issuesUt ...

  4. C# 将html实体编码转换到正常字符 & #40;格式

    获取到html实体编码字符后,通过正则获取其中的html实体编码,再统一强制转换到正常字符: 代码如下: string strformat = item.value7; //将html实体编码转换到正 ...

  5. MS-SQL使用xp_cmdshell命令导出数据到excel

    exec master..xp_cmdshell 'bcp "select c.Category_Title as 标题,p.Category_Title as 所属分类 from ltbl ...

  6. Antiprime数-数论

    题目描述 Description 如果一个自然数n满足:所有小于它的自然数的约数个数都小于n的约数个数,则称n是一个Antiprime数.譬如:1.2.4.5.12.24都是Antiprime数.   ...

  7. Servlet处理流程分析

    ---------------siwuxie095                                 Tomcat 处理客户端请求的方式:     Tomcat 既是一个 Servlet ...

  8. Ubuntu 安装Logstash

    Logstash 包是从同一存储库中可用,如 Elasticsearch,和我们已经安装了该公钥,因此,让我们共创 Logstash 源列表︰ echo 'deb http://packages.el ...

  9. SpringSecurity01 SpringSecurity环境搭建

    版本说明: JDK -> java version "1.8.0_101" MAVEN -> Apache Maven 3.5.0 IDEA -> 2017.2. ...

  10. 关于java中的编码问题

    ok,今天搞了一天都在探索java字符的编码问题.十分头疼.最后终于得出几点: 1.网上有很多博客说判断一个String的编码的方法是通过如下代码;但其实这个代码完全是错的,用一种编码decode后, ...