QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1501|回复: 8

linux 下 不能使用 gets()

[复制链接]
发表于 2004-12-13 11:57:25 | 显示全部楼层 |阅读模式
想从终端输入一段字符串(包括空格符号);

#include "stdio.h"

main()

{

char str[100];

gets(str);

}


用scanf 的话,不能输入空格(会被当作结束); 所以就想用 gers()来实现输入一段包括空格字符串,

但在 linux下 gets是一个不推荐使用的函数,所以不能正常编译通过,


各位大大,该如何是好? 谢谢!
发表于 2004-12-13 13:41:30 | 显示全部楼层
可以通过。只是不建议使用而已 。可以用fgets。
回复

使用道具 举报

发表于 2004-12-13 14:22:50 | 显示全部楼层
[转载]
gets函数是一个非常危险的函数,因为他没有提供对字符串s的出界的保护。库函数中包含他只是由于兼容性的原因。你应该使用fgets和getline来代替它。为确保这一点,无论你在什么时候时候使用gets函数,连接过程将申明一个警告(如果使用库函数ld)。
回复

使用道具 举报

 楼主| 发表于 2004-12-14 09:11:16 | 显示全部楼层
先谢谢两位大哥了

fgets 好像也不能用,

应为我做的是网络编程, fgets 好像是只能作本地文件的读取操作的,
回复

使用道具 举报

发表于 2004-12-14 10:09:46 | 显示全部楼层
refer to UNP.
fgets  is a standard i/o utility.
回复

使用道具 举报

发表于 2004-12-14 14:15:02 | 显示全部楼层
可以用getchar或者getline啊
回复

使用道具 举报

发表于 2004-12-14 14:28:34 | 显示全部楼层
fgets (buf, buf_size, stdio)
回复

使用道具 举报

发表于 2004-12-14 14:30:30 | 显示全部楼层
sorry, should be fgets (buf, buf_size, stdin)
回复

使用道具 举报

发表于 2004-12-16 09:53:05 | 显示全部楼层
[quote:90a0db4ec7="rml"]

fgets 好像是只能作本地文件的读取操作的[/quote]

不要使用它来读取用户自己编辑的文件,因为如果用户在其中插入了一个空字符NULL,你将不得不对此进行处理。如果输入的数据中含有一个空字符,你无法分辨。所以,如果你不能确认数据是否含有空字符NULL,不要使用fgets,建议用getline代替fgets。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 23:23 , Processed in 0.050072 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表