本片博客简单写下关于strcpy()、strncpy()两函数的用法、区别及使用时需要注意的地方。
一、使用介绍
1、 strcpy()函数用法
功能:将source源字符串拷贝到目标空间destination。
参考代码:
#include<stdio.h>
int main()
{
char str1[20] = "xxxxxxxxx";
char str2[] = "xxp";
strcpy(str1, str2);
printf("%s\n", str1); // xxp
return 0;
}
调试观察结果:
不难发现,strcpy函数是将source字符串的所有内容包括'\0'一同拷贝到目标空间当中。
注意:
1)源字符串必须以 '\0' 结束。
2)会将源字符串中的 '\0' 拷贝到目标空间。
3)目标空间必须足够大,以确保能存放源字符串,否则会报错。
4)目标空间必须可变,即不能被const修饰。
2、 strncpy()函数用法
功能:将source源字符串的num个字符拷贝到目标空间destination。
参考代码:
int main()
{
char str1[20] = "xxxxxxxxxxxxxxx";
char str2[] = "hello world";
strncpy(str1, str2, 5);
printf("%s\n", str1); // helloxxxxxxxxxx
return 0;
}
观察调试结果:
拷贝结果分析:(源字符串str2,目标字符串str1)
1)如果str2小于num,那么将str2拷贝到str1后,在目标的后边追加0,直到num个。
2)如果str2大于num,则将对应数量的str2字符串拷贝到str1当中。
二、模拟实现
1、strcpy()模拟实现
参考代码:
void my_strcpy(char* str1, const char* str2)
{
int ret1 = strlen(str2) + 1;
int ret2 = strlen(str1) + 1;
assert(ret1 <= ret2);
for (int i = 0; i < ret1; i++)
{
str1[i] = str2[i];
}
}
int main()
{
char str1[10] = "xxxxxxxxx";
char str2[] = "xxp";
my_strcpy(str1, str2);
printf("%s\n", str1);
return 0;
}
2、strncpy()模拟实现
void my_strncpy(char* str1, const char* str2, size_t num)
{
assert(str1 && str2);
size_t ret = strlen(str2) + 1;
if (num > ret)
{
for (size_t i = 0; i < ret; i++)
{
str1[i] = str2[i];
}
for (size_t j = ret; j < num; j++)
{
str1[j] = '\0';
}
}
else
{
for (size_t i = 0; i < ret; i++)
{
str1[i] = str2[i];
}
}
}
int main()
{
char str1[10] = "xxxxxxxxx";
char str2[] = "xiaxp";
my_strncpy(str1, str2, 8);
printf("%s\n", str1);
return 0;
}
贴张调试图,便于理解。
★★★★★ 感谢阅读!!!