C语言 基础开发----目录


一、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);return 0;
}

运行结果如下:

MQ=0522

三、缓冲区溢出问题和防范

C 语言和 C++语言风格轻松、灵活,语法限制宽松,因而受到各类程序员的欢迎,是比较通用的编程语言,同时也是各大院校计算机专业的基本语言课程。strcpy 函数由于不对数组边界进行检查,而非常容易造成各种缓冲区溢出的漏洞。这些漏洞很容易被利用,而造成严重的系统问题。在使用 strcpy 函数时,要小心谨慎。
以下就 Strcpy 函数中的缓冲区溢出问题和防范进行讨论。

缓冲区溢出问题

缓冲区的溢出就是程序在动态分配的缓冲区中写入了太多的数据,使这个分配区发生了溢出。一旦一个缓冲区利用程序能将运行的指令放在有 root权限的内存中,运行这些指令,就可以利用 root 权限来控制计算机了。

strcpy()函数安全编码

在编程时,加入错误检查,就可及时发现错误,并且对出现的异常进行处理。在编写 strcpy 函数时,首先尽量使目的缓冲区长度足够长,另外要检测目的缓冲区和源缓冲区。如果目的缓冲区或源缓冲区是空,就要在异常处理中结束程序。如果,源字符串比目的缓冲区长度不长,也要在异常处理中结束程序,以防止出现溢出情况。任何程序都很难说是绝对安全,只能以尽可能安全的方式来处理 strcpy 函数。只要输入的字符串不以空字符结束,函数就会随时终止。这种检测容易实现。但是这样的检测也并不能确定函数一定安全。
另外,每添加一个错误检查,就会使程序更复杂,而且可能产生很多的 bug,增加很多的工作量。最重要的是,即使设计程序时非常仔细,也有可能会忽略一些细节问题,导致不可弥补的错误。所以,在编写程序时,最安全的方法,就是尽可能不去使用 strcpy 函数。可以在程序的开头加上 #define strcpy Unsafe_strcpy。这样,就会使 strcpy 函数在编译时产生错误,从而使我们在编程时可以完全摒弃strcpy 函数。在完全丢弃 strcpy 函数的同时,也就丢掉了众多依附于 strcpy 函数的 bug。


C语言:strcpy()---字符串复制相关推荐

  1. C语言自定义字符串复制函数

    用C语简单实现一个字符串复制函数 /*============================================================================Name ...

  2. 用c语言实现字符串复制

    1.题目来源 作者: C课程组 单位: 浙江大学 时间限制: 400 ms 内存限制: 64 MB 代码长度限制: 16 KB 2.问题简述 本题要求编写函数,将输入字符串t中从第m个字符开始的全部字 ...

  3. c语言把字符串复制到剪贴板,如何把位图拷贝到剪贴板中

    //原著:不知道(反正是外国人) //译者:重庆大学光电工程学院 贾旭滨 //欢迎大家批评指教,谢谢! 把位图拷贝到剪贴板中是比较简单的,但是有件事情你可别忘记了,如果位图有调色板的话,你也要把调色板 ...

  4. c语言trave函数,(三)C语言之字符串与字符串函数

    温馨提示 写博客是为了记录在开发过程中所涉及到的技术以及遇到的问题的解决,如果该博客对您有所帮助,希望可以点个关注/喜欢:如果您对文章中的内容有什么不同的见解,欢迎留言进行讨论.谢谢! (三)C语言之 ...

  5. C语言字符串复制函数strcpy()的编写与详解

    strcpy,即string copy(字符串复制)的缩写. 原型声明:char *strcpy(char *dest, const char *src); 头文件:#include <stri ...

  6. C语言常用字符串函数strlen、strcpy、strcat、strcmp、strchr

    C语言常用字符串函数,求串长strlen(char *s).串复制strcpy(char *s1,char *s2).串连接strcat(char *s1,char *s2).串比较strcmp(ch ...

  7. C语言中的复制函数(strcpy和memcpy)

    strcpy和strncpy函数 这个不陌生,大一学C语言讲过,其一般形式为strcpy(字符数组1,字符串2)作用是将字符串2复制到字符数组1中去. EX: char str1[10]='',str ...

  8. c语言strcpy两字符串长度不同,C语言 strcpy和memcpy区别详细介绍

    C语言 strcpy和memcpy区别详细介绍 PS:初学算法,开始刷leetcode,Rotate array的预备知识(写的代码Time Limit Exceed难过)于是百度高效算法,本篇作为预 ...

  9. 不调用C++/C字符串库函数,实现字符串复制函数strcpy

    已知strcpy的函数原型:char *strcpy(char *strDest,const char *strSrc),其中strDest是目的字符串,strSrc是源字符串.不调用C++/C的字符 ...

最新文章

  1. 如何解决Linux操作系统找不到网卡的问题
  2. leetcode算法题--Letter Case Permutation
  3. 数据挖掘 —— 半监督学习(标签传播算法)
  4. AWT架构生成与设计Token
  5. 006---Linux用户、群组和权限
  6. JavaScript实现使用DisjointSet 检测无向循环算法(附完整源码)
  7. html5白话解释,HTML5这个词到底是什么意思?
  8. go语言 Accept error: accept tcp [::]:5551: too many open files;
  9. 软件工程概论课后习题
  10. python图像化计算器
  11. 计算机科学导论整理知识点,《计算机科学导论》 数据库基础知识
  12. 什么是 Office Open XML 文件格式
  13. 重学 Java 设计模式:实战享元模式「基于Redis秒杀,提供活动与库存信息查询场景」
  14. css设置十六进制背景色和透明度
  15. L1-003 个位数统计 (15 分)
  16. exchange 2016 附件大小限制设置
  17. Android 图片处理
  18. 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码
  19. js实现图片瀑布流布局
  20. 网络协议 -- 最全的网络协议图

热门文章

  1. import-html-entry]: error occurs while executing entry script, 乾坤加载子应用路由报错
  2. 机器学习Sklearn——红酒分类案例详解决策树模型参数
  3. 计算机中的PS颜色填充快捷键,ps颜色填充快捷键【设置办法】
  4. Excel——如何在多种分类下填充空白单元格
  5. Nginx 配置一个域名使用HTTPS 后其它域名访问HTTPS时也会跳转到该站点解决
  6. Python中import的用法总结
  7. Anddroid IM来电铃声通过耳机播放
  8. 4天上线“战疫”小程序,腾讯敏捷在数字广东的落地实践
  9. ApkScan-PKID 查壳工具下载使用以及相关技术介绍
  10. MySQL修改用户密码及配置远程访问