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. boost asio中io_service类的几种使用

    io_service类 你应该已经发现大部分使用Boost.Asio编写的代码都会使用几个io_service的实例.io_service是这个库里面最重要的类:它负责和操作系统打交道,等待所有异步操 ...

  2. java代码GUI简单的。。。

    总结:觉得 package com.da; import java.awt.*; //逆向思维:important //创建一个String对象的数组,然后执行读取文本,把文本每一行存入数组,它将读取 ...

  3. netty支持的协议

    流经网络的数据总是具有相同的类型:字节.这些字节是如何流动的主要取决于我们所说的 网络传输--一个帮助我们抽象底层数据传输机制的概念.用户并不关心这些细节:他们只想确保他们的字节被可靠地发送和接收. ...

  4. 【P2P网贷新手入门】详解借款标的种类及其风险

    不同于国外的网贷平台以信用借款标为主,在中国,我们投资网贷平台会看到多样借款标,而投资人往往弄不清自己投资的标属于什么类型的标,特点怎么样,风险如何. 抵 押 标 定义:借款人用自己的房屋车辆等实物在 ...

  5. 第 1 课 Go 简介

    (课程地址: http://study.163.com/course/courseLearn.htm?courseId=306002&from=study#/learn/video?lesso ...

  6. 使用TRY CATCH进行SQL Server异常处理

    TRY...CATCH是Sql Server 2005/2008令人印象深刻的新特性.提高了开发人员异常处理能力.没有理由不尝试一下Try.. Catch功能. *      TRY 块 - 包含可能 ...

  7. sql 根据年份、月份查询数据

    CREATE TABLE [dbo].[T_UserAccess]( ,) NOT NULL, [UserId] [int] NULL, [UserType] [int] NULL, ) NULL, ...

  8. VC 绘图,使用双缓冲技术实现

    VC 绘图,使用双缓冲技术实现 - Cloud-Datacenter-Renewable Energy-Big Data-Model - 博客频道 - CSDN.NET VC 绘图,使用双缓冲技术实现 ...

  9. 十道海量数据处理面试题 - 数据分析与数据挖掘技术-炼数成金-Dataguru专业数据分析社区

    1.海量日志数据,提取出某日访问百度次数最多的那个IP. 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中.注意到IP是32位的,最多有个2^32个IP.同样可以采用映射的方法 ...

  10. 进程中t.start(), t.daemon() t.jion()的使用

    #!/usr/bin/env python import multiprocessing import time def f1(a1): time.sleep(2) print(a1) if __na ...