WHCSRL 技术网

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

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

  定义了两个字符串,首先打印两个字符串的内容,然后使用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
",ret);
	
	strncpy(str1,str2,ret);	
	
	puts(str1);
	puts(str2);
	
	system("pause");
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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

  打印结果如下:
在这里插入图片描述
  字符串1的长度为6,预留一位空字符后,可拷贝的字符空间大小为5,所以拷贝字符串2到字符串1中去的时候,就只拷贝5个字符,保证了拷贝的字符不会出现溢出情况。

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