解决方案
15
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);
5