您的位置:首页 > 其它

gets、scanf 、read函数使用注意事项

2009-03-28 17:44 369 查看
在linux中,使用gets函数编译会报错,但是在vC下却不会,查了一下资料,说是gets不安全,想想确实是。
char str[10];

gets(str);//如果输入字符串的长度>10时,那么就不安全了,访问到了str以外的内存。


替代方法是使用fgets函数,这个函数的参数中有定界的参数,所以是安全的。

我在linux使用scanf时,要不断的输入字符串,代码如下:

1 char str[128];

2 while(1)

3 {

4 scanf("%s",str); //当输入直接按回车时,跳出循环,结束程序

5 if(strlen(str)==0)

6 return 0;

7 printf("%s",str);

8 }

9

程序并没有按照我想的运行,当不输入字符按下Enter时,程序还是停止在scanf上继续等待用户输入!

查了半天也没有办法用scanf来实现我要的功能,想了一下用gets吧,结果发现了gets的上面提及的问题 。我还想到用read函数来进行读取,但是读取时会将回车符'\n'也放到缓冲区中,用strlen来测试的话,会发现字符长度为1。fgets也有这个问题的,不过scanf是不会将回车放进缓冲去的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: