【C语言进阶:刨根究底字符串函数】 strcpy 函数

本节重点内容:

  • 深入理解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语言。

98b76a6f4a9c4ca88fd93da1188ac6f9.gif

猜你喜欢

转载自blog.csdn.net/JX_BC/article/details/129538357
今日推荐