您当前的位置: 首页 >  面试

龚建波

暂无认证

  • 4浏览

    0关注

    312博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

面试题之 strcpy/strlen/strcat/strcmp 的实现

龚建波 发布时间:2022-03-14 19:06:41 ,浏览量:4

一、字符串拷贝strcpy

函数 strcpy 的原型是 char* strcpy(char* des , const char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。

#include 
#include 

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 
#include 

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 
#include 

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
关注
打赏
1655829268
查看更多评论
立即登录/注册

微信扫码登录

0.0822s