【发布时间】:2018-05-28 18:42:19
【问题描述】:
这是手册页中fgets() 的描述:
char *fgets(char *s, int size, FILE *stream);
...
RETURN VALUE
fgets() returns s on success, and NULL on error or when end of file
occurs while no characters have been read.
它不遵循read 的模式,它在失败时返回-1,在成功时返回读取的字节数。相反,它返回一个char*,失败时为NULL,成功时为s。这并没有给我任何关于输入多长时间的信息。所以如果我有这样的事情:
char input_buffer[256];
fgets(input_buffer, sizeof(input_buffer), stdin);
在fgets 调用之后,有没有办法知道输入在不先对缓冲区进行零初始化的情况下持续了多长时间?
谢谢。
【问题讨论】:
-
int len= strlen(input_buffer);会给你。 -
这就是为什么我不喜欢
fgets()的设计,我更喜欢fread()但它不处理语言环境。 -
很高兴知道
strlen可以解决问题,但是有没有不涉及 O(n) 迭代的解决方案?当fgets已经知道长度是多少时,您必须再次弄清楚这似乎很浪费。 -
@Stargateur,
fread()不会 NUL 终止输入,但fgets()会。所以strlen()适用于fgets(),但不适用于fread()。每个功能都有其目的和功能。函数fgets()是这样编写的,因此可以“链接”函数:fread()不是。函数:fgets()用于文本输入。函数:fread()用于二进制输入。