gets()函数
gets()函数溢出问题!
gets()是一个过时的函数,在C语言官方手册中,强烈建议用fgets()取代之!众所周知,gets函数能从键盘接收空格,可以操做带有空格的字符串,但是因为C语言是将
字符串当做一种数组操做的,既然是数组,就有长度,如果gets()函数读取的字符串长度大于被赋值数组的长度,就会引起溢出。而且新版的GCC已经不能正确编译
gets()函数了,会报错。
fgets (buf, size, fp) 其行为方式如下:
(1)遇到换行或文件结束EOF则返回。
(2)按行读取。
(3)每一行结束处的换行字符‘n’也算该行字符。
(4)对于大小为size的buf,最多只读取size-1个字符。
(5)自动地把buf中最后一个字符(通常是换行符)的后面一个字节填充零结束符(”)。 因此如果想把buf中的换行符去掉,可以这样:buf[strlen(buf)-1] = ”;当前前提是buf足够大,可以容纳完整的一行(包括最后的那个换行符)。
fputs (str, fp) (1)把str中零结束符之前的全部文字输入到文件中。
(2)输入完成后,不会增加额外的特殊字符,如换行符等。 如果想输入完str后,就换行,则应该在上述调用后,再调用fputc(‘n’,fp);才行。
小提示:C++中建议大家使用string类 getline或其他读入方式!