@[TOC]字符串常用库函数——strcpy
字符串常用库函数——strcpy
一、函数原理
由于字符串不能直接用***=***号赋值,因此可以用库函数——strcpy进行复制也就是拷贝操作,其函数原型为 char* strcpy (char *s1,const char *s2),其中指针s1指向目标数组,也就是被赋值(拷贝进去)的数组,s2指向原数组,也就是要赋值(拷贝)的数组,把s2复制给s1,直到遇到s2中的‘\0’为止。
## 二、存在问题
在使用strcpy函数过程中要注意,目标数组s1的空间要比s2的打,这样在拷贝时,数组才不会发生越界访问,否则可能会造成未知后果。
三、代码实现
define _CRT_SECURE_NO_WARNINGS 1//调用库函数实现
#include<stdio.h>
#include<string.h>
int main()
{
char arr[10] = "abcdefg";
char arr1[5] = "AAAA";
strcpy(arr, arr1);
printf("%s", arr);
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
char arr[4] = "abc";
char arr1[5] = "AAAA";
strcpy(arr, arr1);
printf("%s", arr);
}
当目标数组空间小于源数组时,能够正常输出结果,但是程序运行崩溃,原因就在于数组越界访问。结果如下图:
My_Strcpy实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void My_strcpy(char* s1, const char* s2)
{
while (*s2!='\0')
{
*s1++ = *s2++;//循环赋值
}
*s1++ = *s2++;//由于s2指向\0时跳出循环,所以\0未赋值到s1中,这里需要补上
}
int main()
{
char arr[10] = "abcdefg";
char arr1[5] = "AAAA";
My_strcpy(arr, arr1);
printf("%s", arr);
}
``