模拟实现strncpy,strncat,strncmp
<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 ;
}
<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 ;
}
<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的更多相关文章
- C语言之库函数的模拟与使用
C语言之库函数的模拟与使用 在我们学习C语言的过程中,难免会遇到这样的一种情况: 我们通常实现一个功能的时候,费尽心血的写出来,却有着满满的错,这时却有人来告诉你说:这个功能可以用相应的库函数来实现. ...
- C/C++中经常使用的字符串处理函数和内存字符串函数
一. 字符处理函数 1. 字符处理函数:<ctype.h> int isdigit(int ch) ;//是否为数字,即ch是否是0-9中的字符 int ...
- C语言扫盲及深化学习
c语言特点: (1)效率高 (2)控制性强 (3)硬件亲和性好 (4)可移植性高 一.关于注释 c语言中注释不能嵌套,因此注释代码时一定要注意源代码中是否已经存在注释.要从逻辑上删除一段代码,利用预编 ...
- C语言字符,字符串,字节操作常用函数
strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...
- C语言-字符串函数的实现(一)之strlen
C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...
- 字符串函数的实现(三)之strcat
C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...
- C语言-字符串函数的实现(五)之strstr
C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...
- C语言-字符串函数的实现(二)之strcpy
C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...
- 华为C语言编程规范
DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...
随机推荐
- 3.5 C++间接继承
参考:http://www.weixueyuan.net/view/6362.html 总结: 假设类C继承自类B,类B继承自类A.那么类C中的除了能够继承B类的成员函数和成员变量外,同样也能继承B类 ...
- TBody scrollbar 设置
由于scrollbar自身有宽度 对于tbody来说可能会挤压与thead不对齐下面办法能够解决大致问题 1.设置tbody display:block : overflow-y:auto:(并且修 ...
- 为什么不同网段的ip 不能直接通信
首先要明白一点,IOS一共七层, 发送数据的过程是从上到下,也就是从应用层一直到物理层,接受数据是从下至上. 来看你的问题,环境如下,我们来用一个ping命令的过程来解释:一个交换机,连两个电脑A和B ...
- nodejs .http模块, cheerio模块 实现 小爬虫.
代码: var http = require("http"); var cheerio = require("cheerio"); var url = 'htt ...
- .Net 3.5 安装教程
虽然说.NET Framework 3.5 SP1已经不是最新版的,但是还有大部分用Xp系统的人还得用它.不过我们使用的系统一般都是Ghost版Xp,Ghost大部分都做过尽量的简化,去除了不必要的组 ...
- 搭建Django项目
命令行搭建Django项目 1.安装django 在指定解释器环境下安装django 1.11.9 在真实python3环境下: pip3 install django==1.11.9 在虚拟环境下: ...
- FCC JS基础算法题(6):Truncate a string(截断字符串)
先看一下题目描述: 如果字符串的长度比指定的参数num长,则把多余的部分用...来表示.切记,插入到字符串尾部的三个点号也会计入字符串的长度.但是,如果指定的参数num小于或等于3,则添加的三个点号不 ...
- Puppet的一些奇技淫巧
puppet这个工具真的很神奇,先不说商业版有哪些黑科技,单是开源版本就有很多可能让你摸不着头脑的地方,下面来列举一下puppet是怎么查找puppet server的 其实很简单,puppet ag ...
- 某些浏览器没有canvas.toBlob 方法的解决方案
var dataURLtoBlob = require('blueimp-canvas-to-blob'); // 80x60px GIF image (color black, base64 dat ...
- SpringBoot2静态资料访问
在SpringBoot2内要继承WebMvcConfigurationSupport并重写addResourceHandlers方法才能访问到静态资料. @Configuration public c ...