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大举投资线下公司,看似咄咄逼人 ...
随机推荐
- poj 2000 Gold Coins(水题)
一.Description The king pays his loyal knight in gold coins. On the first day of his service, the kni ...
- 【转】 Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器
目录(?)[-] Transaction的一些操作 再谈FragmentManager 调用其他fragment的方法 唤起activity 唤起fragment和相互通信 一些其它 Transact ...
- 【原】spring jar 下载
作者:david_zhang@sh [转载时请以超链接形式标明文章] 链接:http://www.cnblogs.com/david-zhang-index/p/8098965.html 1.进入官网 ...
- CentOS7下二进制文件安装MySQL5.6
1.查看已装包 [root@host2 ~]# rpm -qa | grep mysql mysql-libs-5.1.71-1.el6.x86_64 [root@host2 ~]# [root@ho ...
- Centos 7安装与配置chef
背景:随着DevOps 逐渐流行起来,越来越多的工作需要自动化处理,而chef就是其中一款能实现自动化管理的工具,掌握类似chef这样的自动化工具,相信会使你在未来的竞争中更具优势. 俗话说“好记性不 ...
- 拍照选择图片(Activity底部弹出)
效果图如下: 第一步 : 显示出的布局文件:alert_dialog.xml <?xml version="1.0" encoding="utf-8"?& ...
- SpringSecurity01 SpringSecurity环境搭建
版本说明: JDK -> java version "1.8.0_101" MAVEN -> Apache Maven 3.5.0 IDEA -> 2017.2. ...
- Python实现R包brainwaver中的compute.FDR函数
FDR(false discovery rate),是统计学中常见的一个名词,翻译为伪发现率,其意义为是 错误拒绝(拒绝真的(原)假设)的个数占所有被拒绝的原假设个数的比例的期望值. compute. ...
- 16.CTF综合靶机渗透(九)
Boot2root challenges aim to create a safe environment where you can perform real-world penetration t ...
- Web调试利器fiddler介绍
转载:http://blog.chinaunix.net/uid-27105712-id-3738821.html 最近在使用fiddler,发现这个真是非常最犀利的web调试工具,笔者这里强烈推荐给 ...