scanf和strcpy使用不安全?这个是怎么个意思?=_=

Lamuna 2017-03-24 04:38:03

我定位过去之后显示的是这样的:
scanf

strcpy


请问是我代码哪里有潜在安全问题么?
...全文
601 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vnvlyp 2017-03-24
  • 打赏
  • 举报
回复
因为scanf strcpy这些并不知道数组大小,所以有可能造成越界访问的问题呗
自信男孩 2017-03-24
  • 打赏
  • 举报
回复
scanf和strcpy不安全主要是:比如,

char buf[10];
scanf("%s", buf);
若输入的字符串,字符个数小于等于9,最后一个要给'\0',那么就是正常的,但是你不能保证别人知道这个缓存的大小,如果自己输入的字符个数大于9,那么这个缓存就溢出了。

char buf[10];
fgets(buf, 10, stdin);
fgets相对是安全的,因为它最大可以容纳9个有效字符,最后一个是'\0',即使你输入了超过9个字符的输入,它也会将字符串截断,前9个放入缓存里,后面的丢掉;但是有一个小问题,就是若输入的字符小于9,在'\0'之前会有'\n',因为它将回车符会放入缓存; strcpy不安全:是因为若dest的缓存不足够容纳src的数据,就会导致dest溢出(越界);
char *strcpy(char *dest, const char *src);
strncpy会相对安全,因为:第三个参数,可以根据dest的长度来确定要拷贝多少个字节。
char *strncpy(char *dest, const char *src, size_t n);
gzshun 2017-03-24
  • 打赏
  • 举报
回复
这个不用管,vs自己实现了很多安全版本的c标准函数,比如strcpy_s,测试程序无所谓,能编译成功就行

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧