C语⾔:strcpy()---字符串复制
⼀、strcpy()简介字符串拷贝函数strcpy作用
1. 函数原型
char*strcpy(char* dest,const char*src);
2. 参数
dest—指向⽤于存储复制内容的⽬标数组。
src—要复制的字符串。
3. 功能
把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
4. 头⽂件
#include <string.h>
#include <stdio.h>
5. 返回值
返回指向dest的指针。
⼆、strcpy()⽤法
strcpy()函数可以⽤来给数组赋值。
具体代码如下:
#include<stdio.h>
int main(int argc,char*argv[])
{
char temp[20];
strcpy(temp,"MQ=0522");
printf("%s\n",temp);
return0;
}
运⾏结果如下:
MQ=0522
三、缓冲区溢出问题和防范
C 语⾔和 C++语⾔风格轻松、灵活,语法限制宽松,因⽽受到各类程序员的欢迎,是⽐较通⽤的编程语⾔,同时也是各⼤院校计算机专业的基本语⾔课程。strcpy 函数由于不对数组边界进⾏检查,⽽⾮常容易造成各种缓冲区溢出的漏洞。这些漏洞很容易被利⽤,⽽造成严重的系统问题。在使⽤ strcpy 函数时,要⼩⼼谨慎。
以下就 Strcpy 函数中的缓冲区溢出问题和防范进⾏讨论。
缓冲区溢出问题
缓冲区的溢出就是程序在动态分配的缓冲区中写⼊了太多的数据,使这个分配区发⽣了溢出。⼀旦⼀个缓冲区利⽤程序能将运⾏的指令放在有 root权限的内存中,运⾏这些指令,就可以利⽤ root 权限来控制计算机了。
strcpy()函数安全编码
在编程时,加⼊错误检查,就可及时发现错误,并且对出现的异常进⾏处理。在编写 strcpy 函数时,⾸先尽量使⽬的缓冲区长度⾜够长,另外要检测⽬的缓冲区和源缓冲区。如果⽬的缓冲区或源缓冲区是空,就要在异常处理中结束程序。如果,源字符串⽐⽬的缓冲区长度不长,也要在异常处理中结束程序,以防⽌出现溢出情况。任何程序都很难说是绝对安全,只能以尽可能安全的⽅式来处理 strcpy 函数。只要输⼊的字符串不以空字符结束,函数就会随时终⽌。这种检测容易实现。但是这样的检测也并不能确定函数⼀定安全。
另外,每添加⼀个错误检查,就会使程序更复杂,⽽且可能产⽣很多的 bug,增加很多的⼯作量。最重要的是,即使设计程序时⾮常仔细,也有可能会忽略⼀些细节问题,导致不可弥补的错误。所以,在编写程序时,最安全的⽅法,就是尽可能不去使⽤ strcpy 函数。可以在程序的开头加上 #define strcpy Unsafe_strcpy。这样,就会使 strcpy 函数在编译时产⽣错误,从⽽使我们在编程时可以完全摒弃strcpy 函数。在完全丢弃 strcpy 函数的同时,也就丢掉了众多依附于 strcpy 函数的 bug。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论