文档章节

strlen strncat strstr 三种库函数的代码实现

Mr_Cui
 Mr_Cui
发布于 2016/03/31 18:58
字数 646
阅读 10
收藏 0

    首先我们来看strlen函数,它主要是求一个字符串的长度,所以返回的应该是int型类型,其主要方法是将字符串从头到尾进行遍历时进行计数,因此实现起来并不是很难,其主要函数代码如下:

int length(char *p)

{

int len = 0;

while (*p != 0)

{

len++;

p++;

}

return len;

因为字符长度是不包括‘\0’,所以返回时不用进行+1操作。

    然后是关于strncat函数的实现,它主要是对两个字符串进行有个数的连接,注意,是有个数的连接,这也是它和strcat不同的地方,strcat是将整个字符串追加到另一个字符串上,不够灵活。strncat的主要函数方法就是通过指针赋值的方法将源操作数追加到目的操作数上,当然这里的目的操作数必须是有足够空间的,是能够存放下你所给的字符串长度才行。

具体的代码如下:

void *my_strncat(char *dest, const char *src, int k)

{

assert(dest);

assert(src);

char *tmp = dest;         //将目的操作数保存起来

while (*dest)             //首先将目的操作数指向‘\0’处

{

dest++;

}

while (k)                  //再将源操作数追加上去

{

*dest++ = *src++;

k--;

}

return tmp;

}

    这里要说的是,在你执行这个函数是,要将你的目的操作数保存起来,因为当你执行完整个函数时,你的目的操作数的指针已经指向的不是你字符串的首地址了,而当你要返回时必须返回的是你目的操作数的首地址,因此应提前保存起来。

     最后一个就是strstr函数,其主要目的是找子串,它的主要函数方法是两层循环嵌套,第一层循环是以目的操作数作为循环条件的,它主要是为了找到它与源操作数相等时的起始位置,当找到时再进入源操作数的循环,判断整个源操作数是否为它的子串。

主要函数代码如下:

void *my_strstr(char *dest, const char *src)

{

assert(dest);

assert(src);

char *tmp = NULL;

while (*dest)

{

while (*src)

{

if (*dest == *src)

{

dest++;

src++;

}

else break;

}

if (*src == 0)

{

return tmp;      //返回的是找到时目的操作数的位置

}

else

{

dest++;

tmp = dest;       //找到其相等时的位置

}

}

}

这里注意的还是返回值的问题,它返回的是你目的操作数与源操作数相等时的地址,因此要用指针对其进行标识。


本文转载自:http://cuiyuxuan.blog.51cto.com/10786939/1714966

Mr_Cui
粉丝 0
博文 3
码字总数 0
作品 0
铜川
私信 提问
loadrunner写脚本常用C函数

loadrunner写脚本常用C函数 strcat的串连两个字串。 strchr返回指向第一次出现的字符串中的字符。 STRCMP比较两个字符串来确定的字母顺序。 STRCPY一个字符串复制到另一个地方。 strdup重复一...

郭柏雅
2018/08/27
0
0
2016年4月7日

1.引入头文件#include<string.h> 2.字符串函数的介绍 参考自:http://baike.baidu.com/link?url=yO9ML3D8eNrkokZvLfJ9Bc7fMKHrLwQTiN8SaWLEYM9T1LDE-6jUdDt5I83rrktsOR9X7zFFH8gla-6hdAvq 常......

maomao818
2016/04/07
13
0
#include

Linux内核不能使用用户空间的函数,不过内核里还是有很多同名字符串处理函数可用,基本没有障碍。   #include <linux/string.h>即可   当然,有的函数还是体系结构优化的,例如有的power...

hyhlinux
2015/12/29
30
0
有关不调用库函数的字符串操作!

有关不调用库函数的字符串操作! char strstr(char str1,char *str2);在字符串str1中,寻找字串str2,若找到返回找到的位置,否则返回NULL。 #include <iostream> char strstr(char str1,char...

元禛慎独
2016/09/29
22
0
strstr的各种实现--从strlen的实现谈起

如果不看glibc的代码,那么也许你永远也不知道什么叫境界,仅仅认为简单的可读性强的代码就是最好的代码的人也一定停留在应届毕业生的水平,程序很大意义上是给机器看的而不是给人看的,人看...

晨曦之光
2012/04/10
2.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
4
0
Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
今天
10
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
10
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
4
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部