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