C语言学习笔记---字符串拷贝函数strcpy()和strncpy()函数

x33g5p2x  于2021-10-31 转载在 其他  
字(1.1k)|赞(0)|评价(0)|浏览(528)

strcpy()函数

在C语言中拷贝字符串的时候可以直接使用库函数strcpy()来进行操作。下面通过一个例子来演示它的使用方法。

int main(int argc, char *argv[])
{
	char str1[10] = "abcdefg";
	char str2[7] = "123456";
	int ret = 0;
	
	puts(str1);
	puts(str2);
	
	strcpy(str1,str2);	
	
	puts(str1);
	puts(str2);
	
	system("pause");
	return 0;
}

定义了两个字符串,首先打印两个字符串的内容,然后使用strcpy()函数将字符串2拷贝到字符串1中去。输出结果如下:

  通过结果可以看出,字符串1内的内容全部被字符串2替换了。在拷贝数据的时候要注意一点,要确保字符串1的空间能够存储下字符串2,strcpy()函数在拷贝数据的时候是不会自动检测字符串1的空间大小的。如果字符串1的空间不能够完全容纳字符串2的字符,那么多余的字符可能就会覆盖到内存其他空间中去,导致程序异常。

strncpy()函数

为了解决strcpy()函数在拷贝数据不能自动检测字符串1空间大小的问题,在拷贝数据的时候可以使用 strncpy()函数,这个函数比strcpy()函数多了一个参数,第三个参数就是要拷贝数据的大小。通过第三个参数来限制拷贝的字符长度,从而避免数据溢出的问题。

int main(int argc, char *argv[])
{
	char str1[6] = "abc";
	char str2[] = "1234567890";
	int ret = 0;
	
	puts(str1);
	puts(str2);
	
	ret = sizeof(str1);
	printf("%d\r\n",ret);
	
	strncpy(str1,str2,ret);	
	
	puts(str1);
	puts(str2);
	
	system("pause");
	return 0;
}

在拷贝数据的时候,首先通过sizeof()函数计算字符串1的空间大小,然后使用strncpy()函数拷贝数据的时候,用字符串1空间大小减1作为第三个参数,由于字符串的最后一位必须是空字符’\0’,而sizeof()函数在计算字符串大小的时候会把最后一空字符也计算进去,所以在设置拷贝字符长度的时候,必须给字符串1预留一位来存放空字符。

打印结果如下:

  字符串1的长度为6,预留一位空字符后,可拷贝的字符空间大小为5,所以拷贝字符串2到字符串1中去的时候,就只拷贝5个字符,保证了拷贝的字符不会出现溢出情况。

由此可见使用strncpy()函数拷贝字符串的时候会更加安全。

相关文章