💖个人主页:小光死嗑C++
💖**本人介绍:**一名机械生非要找死学计算机,c++爱好者,正在c++道路上探索,愿意拿出一百二十的精力去与C++死磕到底!
💖文章难易程度:本人的文章没有貂蝉那么美,没有吕布那么强,通俗点说,小光的文章并不像那些大牛一样那么神奇,没有那么高深的算法,只是对自己所掌握的内容进行总结、梳理,最后一步一步细细细的写出来。所以不管是入门的小白,还是要复习牛逼的大佬,都是可以非常容易理解的希望各位不要嫌我啰嗦!
结尾:最后说一点,小光的文章可能会有点不一样,只为了主打你在阅读文字繁多的资料时也可以让你开开心心的浏览!
文章目录
今天,小光又为大家带来了四个龙凤胎函数函数,几个函数非常的酷似,但是,也各有各帅气,各有各的漂亮,现在直接为大家做一个详细的讲解:
发车!!!
💯1.strcpy()
头文件:#include <string.h>
函数功能介绍:strcpy()函数是一个字符串拷贝函数,用来将一个数组中字符串的内容拷贝到另一个另一个数组中。
记住:只是一份拷贝而已,并没有修改原字符串的内容
下面小光先实现一下函数的功能来简单的了解一下!
int main()
{
char arr[] = "abcdef";
char copy[20] = { 0 };
strcpy(copy, arr);//数组名是数组首元素地址
printf("%s", copy);
}
就这么进行了乾坤大挪移😁,就是这么so easy!!!同样,想要了解一个函数,必备网站:https://cplusplus.com
🔴注意事项一:请看错误代码:
注意:有些人的就喜欢自创武功,能力不行还偏要勉强,觉得就像上面代码一样,进行一个简单的相互赋值就可以了,那就是打错特错的!语法就是语言的法则,想要拷贝字符串就是用strcpy!
🔴注意事项二:
strcpy()函数具体在拷贝的时候,他是如何知道要拷贝多少个字符?拷贝到那个字符时停止?请看下面代码:
int main()
{
char arr[] = "abc\0def";
char copy[20] = "xxxxxxxx";
strcpy(copy, arr);
printf("%s", copy);
}
呀!当我在字符串中间放了一个‘\0’后,经过调试发现,不仅拷贝了abc,同时也将‘\0’也拷贝了过去!
再看另一组测试:
得出结论:
干货一:
strcpy()在使用的时候,遇见‘\0’就结束拷贝,同时,将‘\0’也拷贝了过去。就像小弟遇见大哥一样,看见就停止了嚣张的步伐😎,当没有遇见\0时,就会一直拷贝!
🔴注意事项三:
干货二:
以上这组代码表示,当往目标空间里面拷贝字符时,一定要注意目标空间足够大,不然就会造成栈溢出,程序崩溃!如果一个程序员能犯下这样的错误,那你就应该被辞退了😂!
🔴注意事项四:
程序已经崩溃掉!!!,因为p1是一个常量字符串,常量字符串中的内容是不可以以改变的!
干货四:
拷贝时必须保证目标空间可变!!!
strcpy()的模拟实现
# include <assert.h>
char* my_strcpy(char* dest, const char* src)
{
char* ret = dest;//先保存目标空间的起始地址
assert(dest && src);//断言
while (*dest++ = *src++)//直到遇见\0停止
{
;
}
return dest;//返回目标空间的起始地址
}
int main()
{
char arr1[] = "abcdef";
char arr2[10] = { 0 };
my_strcpy(arr2, arr1);
printf("%s", arr2);
//第二种打印方法:
//printf("%s",my_strcpy(arr2,arr1));必须有返回值
return 0;
}
总结:
1、原字符串必须以‘\0’终止
2、会将源字符串中的\0拷贝到目标空间里去
3、目标空间必须足够大,以确保能存放源字符串。
3、目标空间必须可变
💯2.strncpy()
头文件:include <string.h>
这个函数也是字符串拷贝函数,但是他有一点点点的不一样,就是多了一个字母n,虽说只是多了一个字母,但是也多了一项功能!
先看文件:
多了一个size_t num, 表示,把源字符串内容拷贝到目标字符中,多了一项功能就是,你可以给我一个需要拷贝字符的个数,你让我拷贝几个,我就给你拷贝几个!
🔴注意事项一:
程序发生了错误,目标空间根本就不够放得下6个字符,当然会造成错误;啦,这一点和strcpy是一样的,目标空间必须足够!当然,如果一个人想写bug,谁也拦不住!
🔴注意事项二:
当我们要拷贝的字符数量大于了源字符串中的数量时,拷贝完源字符串中内容后,会在后面补加0,直到我们所要求的拷贝数量,就比如,以上代码,我们要拷贝9个字符,但是里面只有6个字符,剩余的3个字符用0来补充!!!
干货:
1、拷贝num个字符从源字符串到目标空间
2、如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后面追加0,直到num个
本篇章有什么不满意的地方,希望大家多多在评论区评论!!!💝💝💝
贝9个字符,但是里面只有6个字符,剩余的3个字符用0来补充!!!
干货:
1、拷贝num个字符从源字符串到目标空间
2、如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后面追加0,直到num个
本篇章有什么不满意的地方,希望大家多多在评论区评论!!!💝💝💝