strcpy/strlen/strcat/strcmp的实现
一、字符串拷贝strcpy
函数strcpy
的原型是char* strcpy(char* des , const char* src)
,des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。
#include <assert.h>
#include <stdio.h>
char* strcpy(char* des, const char* src)
{
assert((des!=NULL) && (src!=NULL));
char *address = des;
while((*des++ = *src++) != '\0')
;
return address;
}
要知道 strcpy 会拷贝’\0’,还有要注意:
源指针所指的字符串内容是不能修改的,因此应该声明为 const 类型。
要判断源指针和目的指针为空的情况,思维要严谨,这里使用
assert
(见文末)。要用一个临时变量保存目的串的首地址,最后返回这个首地址。
函数返回 char* 的目的是为了支持链式表达式,即strcpy可以作为其他函数的实参。
二、字符串长度strlen
函数strlen
的原型是size_t strlen(const char *s)
,其中 size_t 就是 unsigned int。
#include <assert.h>
#include <stdio.h>
int strlen(const char* str)
{
assert(str != NULL);
int len = 0;
while((*str++) != '\0')
++len;
return len;
}
strlen 与 sizeof 的区别:
sizeof是运算符,strlen是库函数。
sizeof可以用类型、变量做参数,而strlen只能用 char* 变量做参数,且必须以
\0
结尾。sizeof是在编译的时候计算类型或变量所占内存的大小,而strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度。
数组做sizeof的参数不退化,传递给strlen就退化为指针了。
三、字符串连接strcat
函数strcat
的原型是char* strcat(char* des, char* src)
,des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。
#include <assert.h>
#include <stdio.h>
char* strcat(char* des, const char* src) // const表明为输入参数
{
assert((des!=NULL) && (src!=NULL));
char* address = des;
while(*des != '\0') // 移动到字符串末尾
++des;
while(*des++ = *src++)
;
return address;
}
四、字符串比较strcmp
函数strcmp
的原型是int strcmp(const char *s1,const char *s2)
。
- 若s1==s2,返回零;
- 若s1>s2,返回正数;
- 若s1<s2,返回负数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇\0
为止。
#include <assert.h>
#include <stdio.h>
int strcmp(const char *s1,const char *s2)
{
assert((s1!=NULL) && (s2!=NULL));
while(*s1 == *s2)
{
if(*s1 == '\0')
return 0; ++s1;
++s2;
}
return *s1 - *s2;
}
strcpy/strlen/strcat/strcmp的实现的更多相关文章
- strcpy/strlen/strcat/strcmp面试总结
<strcpy拷贝越界问题> 一. 程序一 #include<stdio.h> #include<string.h> void main() { char s[]= ...
- strcpy,strlen, strcat, strcmp函数,strlen函数和sizeof的区别
//计算字符串实际长度 //strlen()函数:当遇到'\0'时,计算结束,'\0'不计入长度之内,如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0 ...
- 自定义方法实现strcpy,strlen, strcat, strcmp函数,了解及实现原理
位置计算字符串长度 //strlen()函数,当遇到'\0'时,计算结束,'\0'不计入长度之内 //字符串的拷贝 //strcpy(字符串1,字符串2); //把字符串2 ...
- 面试题之strcpy/strlen/strcat/strcmp的实现
阿里的电面要我用C/C++实现一个字符串拷贝的函数,虽然以前写过 strcpy 的函数实现,但时间过去很久了,再加上有点紧张,突然就措手不及了.最后写是写出来了,但没考虑异常的情况,面试官好像很不满意 ...
- strlen strcat strcpy strcmp 自己实现
strlen strcat strcpy strcmp 自己实现 strlen include <stdio.h> #include <string.h> #include & ...
- 写出完整版的strcpy函数及其他如:strcat,strcmp,strstr的函数实现
(---牛客网中刷题---)写出完整版的strcpy函数 如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案: 2分 1 2 3 4 void strcpy( char *st ...
- strcpy(),strcat()的用法
strcpy(): 定义一个字符串char a[20],和一个字符串c[]="i am a teacher!"; 把c复制到a中就可以这样用:strcpy(a,c); 这个函数包含 ...
- 库函数strcpy/strlen的工作方式
库函数strcpy/strlen的工作方式 分类: C/C++ 2011-07-03 23:49 1032人阅读 评论 ...
- strlen(); strcpy(); strcat(); strcmp() ---笔记
指针小知识点: int a =10; int *p=&a; int *q=p; //p中保存的是a的地址 int *q=p; //将p的值赋给q 作用是让q也指向a ...
随机推荐
- Luogu 4137 Rmq Problem / mex
一个主席树题. 一开始想着直接动态开点硬搞就可以了,每次查询只要作一个类似于前缀和的东西看看区间有没有满,在主席树上二分就可以了. 但是这样是错的,因为一个权值会出现很多次……然后就错了. 所以我们考 ...
- Java Collection.RP
在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便.这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结 ...
- vimrc 我的专属vim配置
set nu set wrap syntax on filetype on "打开vim文件类型自动检测功能 set autoindent set smartindent set ruler ...
- STL--C++中 destory() 和deallocate()以及delete函数的相关性和区别性,destorydeallocate
这里非常的绕口 需要仔细的来看看: destory(): 显示调用一个对象的析构函数 相当于释放一个对象需要释放的一些动态内存 为下次真正释放对象做准备 deallocate():真正的释放一个内存 ...
- 《Head First Servlets & JSP》-1-前言
<Head First Servlets & JSP>(中文版) BB,KS & BB著, 苏钰函,林剑译,中国电力出版社 数据交互 Web浏览器和Web服务器:通过Htt ...
- ipmitool查询服务器功耗
通过ipmitool查看服务器功耗 ipmitool -H $ip -I lanplus -U $user -P $password sdr elist | grep "Pwr Consum ...
- Liunx在开机后,自动启动openldap、radius、memcached等程序的shell脚本
以下是脚本命令: #!/bin/bash #说明:此文件需放在/etc/rc.d/init.d/目录下,然后编辑文件/etc/rc.d/rc.local,在里面添加bash /etc/init.d/A ...
- C - 又见GCD
有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c. Input第一行输入一个n,表示有n组测试数据,接下来 ...
- Websocket,ProtoBuffer,Hightlight,JSON 等,最近遇到的一些知识点小结
websocket websocket 支持但不仅限于web场景,是一种封装好的socket通信协议,可以用来做C-S通信. 可以通过设置 binaryType 来指定通信的数据流格式,从而达到简洁高 ...
- BZOJ 1974 [Sdoi2010] auction 代码拍卖会(数位dp)
题目描述 随着iPig在P++语言上的造诣日益提升,他形成了自己一套完整的代码库.猪王国想参加POI的童鞋们都争先恐后问iPig索要代码库.iPig不想把代码库给所有想要的小猪,只想给其中的一部分既关 ...