gets和fgets

gets和fgets

作者:LAMP小白  点击:2792  发布日期:2012-09-27 00:56:00  返回列表
我们可以用gets()来读取一行字符,但是gets必须要有一个能够确保存储输入数据的数组来给他使用
所以这个函数非常危险,你使用它的时候编译器会显示一条严重警告,因为如果输入超过了定义的容纳长度gets仍然会继续将剩下的数据储存在后面的内存地址中,天知道后面的内存地址储存着什么,从而造成内存溢出.
但使用起来很简单:


#include 
int main(void){
    char str1[10] = "";
    gets(str1);
    printf("%s", str1);
    return 0;
}

但是用fgets()就能解决这个问题,不过fgets()读取的长度比我们指定的长度少一位,因为他要留一位来储存终止符
比如

char str1[5] 输入abc fgets()会读取5位,剩下的2位是n,其中是他强制加入到末尾的,而n是我们确认输入时敲下的回车
如果输入abcd那么fgets()会读取abcd,如果输入abcde那么fgets()也只会读入abcd剩下的e会在stdin缓冲区中保留,就算调用fflush(stdin)清空stdin也只能清除n而无法清除掉多输入的内容
#include 
#include 
int main(void){
    char str1[5] = "";
    char str2[5] = "";
    int len = 0;
    fgets(str1, sizeof(str1), stdin);
    fflush(stdin);
    fgets(str2, sizeof(str2), stdin);
    len = strlen(str2);
    printf("%s,%s,%d,%d,%d", str1, str2, len, sizeof(str1), sizeof(str2));
    return 0;
}



上一篇:JS写淡入淡出下拉菜单的问题 下一篇:快递查询API
0