0
点赞
收藏
分享

微信扫一扫

strcpy()、strncpy()函数

SDKB英文 2022-03-30 阅读 115
c语言

本片博客简单写下关于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;
}

        贴张调试图,便于理解。

 

★★★★★ 感谢阅读!!!

举报

相关推荐

0 条评论