乐闻世界logo
搜索文章和话题

How to read from stdin with fgets()?

5 个月前提问
4 个月前修改
浏览次数34

1个答案

1

fgets() 是一个在 C 语言中用来从指定的文件流中读取字符串的函数。当用于从 stdin(标准输入流)读取时,它可以从用户输入中获取一行数据,直到遇到换行符或达到指定的字符数。使用 fgets() 的好处是它可以避免缓冲区溢出的问题,比起使用 gets() 函数更加安全。

函数原型

c
char *fgets(char *str, int n, FILE *stream);
  • str 是一个指向数组的指针,该数组用于存储读取的字符串。
  • n 是要读取的最大字符数,包括空字符('\0')。
  • stream 是输入流,对于从标准输入读取,应该是 stdin

使用示例

下面是一个使用 fgets()stdin 读取用户输入的简单示例。在这个例子中,我们读取用户输入的一行文本并回显它。

c
#include <stdio.h> int main() { char input[100]; // 声明一个字符数组,最大可存储99个字符 + 1个空字符 printf("请输入一些文本: "); if (fgets(input, sizeof(input), stdin)) { // 输出读取到的数据 printf("您输入的是: %s", input); } else { // 如果读取失败,输出错误消息 printf("读取错误。\n"); } return 0; }

说明

  1. 缓冲区大小:在以上示例中,我们定义了一个大小为100的字符数组。这意味着我们可以读取最多99个字符的输入,第100个位置保留给终结的空字符('\0')。

  2. 处理换行符fgets() 会将换行符('\n')也读入到字符串中,如果不希望在输出中显示换行符,需要手动移除或替换字符串中的'\n'。

  3. 错误处理:通过检查 fgets() 的返回值,我们可以确定读取是否成功。如果 fgets() 因为错误或文件结束而失败,它将返回 NULL

总结

使用 fgets() 读取 stdin 是处理用户输入的一种安全且灵活的方式。它防止缓冲区溢出并可以很容易地处理不同长度的输入。通过适当的错误检查和输入处理,可以使得程序更加健壯和用户友好。

2024年6月29日 12:07 回复

你的答案