1. 主页
  2. 文档
  3. C语言教程
  4. C语言文件处理
  5. C语言中的fgets()和gets()

C语言中的fgets()和gets()

要读取带有空格的字符串值,我们可以在 C 编程语言中使用 gets() 或 fgets()。在这里,我们将看到gets() 和fgets() 之间的区别。

fgets()

它从指定的流中读取一行并将其存储到 str 指向的字符串中。它在读取 (n-1) 个字符、读取换行符或到达文件结尾时停止,以先到者为准。
语法 :

char *fgets(char *str, int n, FILE *stream) 
str :指向复制读取字符串的字符数组的指针。
n :要复制到 str 的最大字符数
(包括终止的空字符)。
*stream :指向标识输入流的 FILE 对象的指针。
stdin 可用作从标准输入读取的参数。
returns 函数返回 str
  • 它遵循一些参数,例如最大长度、缓冲区、输入设备引用。
  • 使用它是安全的,因为它会检查数组绑定。
  • 它继续阅读,直到遇到换行符或字符数组的最大限制。

示例:假设最大字符数为 15,输入长度大于 15,但 fgets() 仍将仅读取 15 个字符并打印它。

// C program to illustrate
// fgets()
#include <stdio.h>
#define MAX 15
int main()
{
char buf[MAX];
fgets(buf, MAX, stdin);
printf("string is: %s\n", buf);

return 0;
}

由于 fgets() 从用户读取输入,我们需要在运行时提供输入。

Input:
Hello and welcome to 52cxydh

Output:
Hello and welc

gets()

从标准输入 (stdin) 读取字符并将它们作为 C 字符串存储到 str 中,直到到达换行符或文件结尾。
语法:

char * 获取 ( char * str ); 
str :指向内存块的指针(字符数组)
其中读取的字符串被复制为 C 字符串。
returns :函数返回 str
  • 使用不安全,因为它不检查数组绑定。
  • 它用于从用户读取字符串,直到没有遇到换行符。

示例:假设我们有一个 15 个字符的字符数组并且输入大于 15 个字符,gets() 将读取所有这些字符并将它们存储到变量中。因为,gets() 不检查输入字符的最大限制,所以在任何时候编译器都可能返回缓冲区溢出错误。

// C program to illustrate
// gets()
#include <stdio.h>
#define MAX 15

int main()
{
char buf[MAX];

printf("Enter a string: ");
gets(buf);
printf("string is: %s\n", buf);

return 0;
}

由于gets() 从用户读取输入,我们需要在运行时提供输入。

Input:
Hello and welcome to 52cxydh

Output:
Hello and welcome to 52cxydh

 

这篇文章对您有用吗?