1.模拟实现strncpy 
<1.>strncpy相比于strcpy增加了size_t参数可以实现最多拷贝的字节数
<2.>(size_t不可以超出拷贝存放的内存大小)来保证不会超出destanaton的内存,
<3.>但是需要注意的是,如果你需要拷贝的长度小于源字符串长度,那么strncpy不会在末尾加'\0'
 #include<stdio.h>
#include<assert.h>
#include<string.h>
char* Strncpy(char* destination, const char* source, size_t num)
{
size_t i = ;
while (i<num)
{
destination[i] = source[i];
++i;
}
return destination;
}
int main()
{
char str1[] = "To be or not to be";
char str2[];
char str3[];
//拷贝最大的字节
Strncpy(str2, str1, sizeof(str2));
//拷贝小于str1的字节
Strncpy(str3, str2, );
str3[] = '\0'; //需要自己加如'\0'
puts(str1);
puts(str2);
puts(str3);
return ;
}
 
2.模拟实现strncat
<1.>现在destination函数中找到'\0',然后将source函数中的num个字符拼接到destination中
<2.>注意source函数不能修改,需要加const
<3.>返回结果是指针类型

 #include<stdio.h>
#include<assert.h>
char* Strncat(char* destination, const char* source, size_t num)
{
//检查合法性
assert(destination != NULL);
assert(source != NULL);
//找到destination中的'\0'
int i = ;
while (destination[i]!='\0')
{
i++;
}
//拼接字符串
for (int j = ; num > ; i++, j++, num--)
{
destination[i] = source[j];
}
destination[i] = '\0';
return destination;
}
int main()
{
char str1[] = "abcd";
char str2[] = "efghijklmn";
//拼接前4个字符
Strncat(str1,str2,);
puts(str1);
printf("\n");
//拼接全部字符,(因为上一个Strncat已经改变了str1的值)
Strncat(str1, str2, sizeof(str2));
puts(str1);
return ;
}
 
3.模拟实现strncmp
<1.>strncmp返回值与strcmp一样
<2.>如果str1与str2前num个字符一样则返回0
<3.>str1小于str2则返回一个小于0的数
<4.>str1大于str2则返回一个大于0的数
 #include <stdio.h>
#include<assert.h>
#include<string.h>
int Strncmp(const char* str1, const char* str2, size_t num)
{
assert(str1 != NULL);
assert(str2 != NULL);
while (num>)
{
if (*str1 > *str2)
{
return ;
}
else if (*str1 < *str2)
{
return -;
}
else if (*str1 == *str2)
{
str1++;
str2++;
num--;
}
else
{
str1++;
str2++;
num--;
}
}
return ;
}
int main()
{
char str1[] = "abcdef";
char str2[] = "abty";
//模拟实现Strncmp
printf("%d\n", Strncmp(str1, str2, ));//前两个字符相等
printf("%d\n", Strncmp(str1, str2, ));//前三个字符不相等
printf("%d\n", Strncmp("abcde", "abc", ));//str1大于str2
printf("%d\n", Strncmp("abc", "abcde", ));//str1小于str2
printf("\n");
//库函数strncmp
printf("%d\n", strncmp(str1, str2, ));
printf("%d\n", strncmp(str1, str2, ));
printf("%d\n", strncmp("abcde", "abc", ));
printf("%d\n", strncmp("abc", "abcde", ));
return ;
}

模拟实现strncpy,strncat,strncmp的更多相关文章

  1. C语言之库函数的模拟与使用

    C语言之库函数的模拟与使用 在我们学习C语言的过程中,难免会遇到这样的一种情况: 我们通常实现一个功能的时候,费尽心血的写出来,却有着满满的错,这时却有人来告诉你说:这个功能可以用相应的库函数来实现. ...

  2. C/C++中经常使用的字符串处理函数和内存字符串函数

    一.            字符处理函数 1.        字符处理函数:<ctype.h> int isdigit(int ch) ;//是否为数字,即ch是否是0-9中的字符 int ...

  3. C语言扫盲及深化学习

    c语言特点: (1)效率高 (2)控制性强 (3)硬件亲和性好 (4)可移植性高 一.关于注释 c语言中注释不能嵌套,因此注释代码时一定要注意源代码中是否已经存在注释.要从逻辑上删除一段代码,利用预编 ...

  4. C语言字符,字符串,字节操作常用函数

    strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...

  5. C语言-字符串函数的实现(一)之strlen

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  6. 字符串函数的实现(三)之strcat

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  7. C语言-字符串函数的实现(五)之strstr

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  8. C语言-字符串函数的实现(二)之strcpy

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  9. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

随机推荐

  1. css动画库

    转载自:http://www.cnblogs.com/starof/p/4968769.html 本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方 ...

  2. 读写锁 SRWLOCK

    读写锁在对资源进行保护的同时,还能区分想要读取资源值的线程(读取者线程)和想要更新资源的线程(写入者线程). 对于读取者线程,读写锁会允许他们并发的执行.当有写入者线程在占有资源时,读写锁会让其它写入 ...

  3. 1080 MOOC期终成绩

    对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分( ...

  4. 关于Java课堂实验中的一些总结(Scanner)

    import java.util.Scanner; 这个头文件是java里面用来输入东西的,就相当于c++里面的iostream输入流...?暂且这么理解吧 然后使用方法:Scanner in = n ...

  5. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(一)

    [MyEclipse最新版下载] 一.创建一个EJB项目 1. 选择File>New Project,选择EJB Project,然后单击Next. 2. 在Project name字段中输入f ...

  6. java去除字符串的空格,换行符,水平制表符,回车

    final private String stringTrimAll(final String input) { if (null == input) return ""; // ...

  7. poj1062(分区间迪杰斯特拉,内含测试数据,一直wa的同学可以进来看看)

    昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 54946   Accepted: 16518 Descripti ...

  8. 12.输入一个成绩计算其A,B,C,D,E等级

    #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int score; s ...

  9. 简短而有效的python queue队列解释

    Queue.qsize() 返回队列的大小  Queue.empty() 如果队列为空,返回True,反之False  Queue.full() 如果队列满了,返回True,反之False Queue ...

  10. 2.9 iframe

    2.9 iframe 一.frame和iframe区别Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性. frame是整个页面的框架,iframe是内嵌 ...