C 库 - fgets() 函数



C 库函数 fgets(FILE *stream) 从指定的流中读取下一个字符(无符号字符),并推进流的位置指示器。它通常用于从文件或标准输入 (stdin) 读取输入。

语法

以下是 C 库函数 fgets() 的语法:

char *fgets(char *str, int n, FILE *stream);

参数

此函数接受三个参数:

  • char *str : 指向字符数组的指针,读取的字符串将存储在此数组中。此数组应足够大,以容纳字符串,包括终止空字符。
  • int n: 要读取的最大字符数,包括终止空字符。fgets 将最多读取 n-1 个字符,为空字符预留空间。
  • FILE *stream: 指向 FILE 对象的指针,指定要从中读取的输入流。这可以是从 fopen 等函数获得的文件指针,也可以是 stdin(标准输入)。

返回值

成功时,fgets 返回与传入相同的指针 str,该指针现在包含已读取的字符串。如果发生错误,或者达到文件结尾且未读取任何字符,则 fgets 返回 NULL。

示例 1:从标准输入读取一行

此示例从标准输入读取一行文本并打印它。缓冲区大小为 50,允许最多 49 个字符长的行(加上空终止符)。

以下是 C 库 fgets() 函数的示例。

#include <stdio.h>

int main() {
   char buffer[50];

   printf("Enter a string: ");
   if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
       printf("You entered: %s", buffer);
   } else {
       printf("Error reading input.");
   }

   return 0;
}

输出

以上代码产生以下结果:

Enter a string: Welcome to tutorials point
You entered: Welcome to tutorials point

示例 2:处理文件结尾

此示例使用较小的缓冲区大小逐行读取文件,显式处理文件结尾条件。如果到达文件结尾,则会打印一条消息。

#include <stdio.h>

int main() {
   FILE *file = fopen("example.txt", "r");
   char buffer[20];

   if (file == NULL) {
       printf("Failed to open file.\n");
       return 1;
   }

   while (fgets(buffer, sizeof(buffer), file) != NULL) {
       printf("Read: %s", buffer);
   }

   if (feof(file)) {
       printf("End of file reached.\n");
   } else if (ferror(file)) {
       printf("An error occurred.\n");
   }

   fclose(file);
   return 0;
}

输出

执行以上代码后,我们得到以下结果:

(This output will depend on the contents of example.txt)
End of file reached.
广告