Code Bye

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


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

strcpy

问一下是本人代码哪里有潜在安全问题么?
解决方案

15

scanfstrcpy不安全主要是:例如,
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);

5

原因是scanf strcpy这些并不知道数组大小,所以有可能造成越界访问的问题呗

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明scanf和strcpy使用不安全?这个是怎么个意思?=_=