本节重点内容:
- 深入理解strcpy函数的使用
- 学会strcpy函数的模拟实现
⚡strcpy
- Copies the C string pointed by source into the array pointed by destination, including the
terminating null character (and stopping at that point). - 源字符串必须以 '\0' 结束。
- 会将源字符串中的 '\0' 拷贝到目标空间。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可变。
strcpy的基本使用:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcdef";
char arr2[20] = { 0 };
strcpy(arr2, arr1);//将arr1的数据拷贝到arr2中
printf("%s\n", arr2);
return 0;
}
运行结果如下:
下面来举几个相关的例子:
1. 源字符串必须以 '\0' 结束,否则无法进行正确拷贝。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr1[] = { 'a','b','c' };
char arr2[20] = "xxxxxxxx";
strcpy(arr2, arr1);
printf("%s\n", arr2);
return 0;
}
//此程序会崩溃
2. strcpy会将源字符串中的 '\0' 拷贝到目标空间。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abc\0def";
char arr2[20] = "xxxxxxxx";
strcpy(arr2, arr1);
printf("%s\n", arr2);
return 0;
}
代码运行结果如下:
3. 目标空间必须足够大,以确保能存放源字符串。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcdef";
char arr2[3] = { 0 };
strcpy(arr2, arr1);
printf("%s\n", arr2);
return 0;
}
程序报错:
4. 目标空间必须可以修改。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char* p = "abcdef"; //指针所指向的字符串为常量字符串,其内容不能被修改。
char arr2[20] = "JX_BC";
strcpy(p, arr2);
printf("%s\n", arr2);
return 0;
}
//该程序会崩溃
⚡模拟实现strcpy函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<assert.h>
//返回目标空间的起始位置
char* my_strcpy(char* dest, const char* src)//源头的数据不能发生变化,因此加上const进行保护
{
char* start = dest;
assert(dest && src);//断言保证两个指针有效
while (*dest++ = *src++)
{
;
}
return start;
}
int main()
{
char arr1[] = "abcdef";
char arr2[20] = { 0 };
my_strcpy(arr2, arr1);
printf("%s\n", arr2);
//printf("%s\n", my_strcpy(arr2, arr1));
return 0;
}
代码运行结果如下:
感谢大家能够看完这篇博客,创作时长,小伙伴们觉得我的博客对你有帮助,不妨留下你的点赞的收藏,关注我,带你了解不一样的C语言。