70,022
社区成员




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);