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

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

strcpy()函数

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

  1. int main(int argc, char *argv[])
  2. {
  3. char str1[10] = "abcdefg";
  4. char str2[7] = "123456";
  5. int ret = 0;
  6. puts(str1);
  7. puts(str2);
  8. strcpy(str1,str2);
  9. puts(str1);
  10. puts(str2);
  11. system("pause");
  12. return 0;
  13. }

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

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

strncpy()函数

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

  1. int main(int argc, char *argv[])
  2. {
  3. char str1[6] = "abc";
  4. char str2[] = "1234567890";
  5. int ret = 0;
  6. puts(str1);
  7. puts(str2);
  8. ret = sizeof(str1);
  9. printf("%d\r\n",ret);
  10. strncpy(str1,str2,ret);
  11. puts(str1);
  12. puts(str2);
  13. system("pause");
  14. return 0;
  15. }

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

打印结果如下:

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

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

相关文章