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

📅  最后修改于: 2021-05-26 03:20:22             🧑  作者: Mango

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

fgets()

它读取从指定的流,并将其存储到由STR指向的字符串线。当任一第(n-1)字符被读取,字符被读出,或在达到结束文件,以先到者为准停止。
句法 :

char *fgets(char *str, int n, FILE *stream)
str : Pointer to an array of chars where the string read is copied.
n : Maximum number of characters to be copied into str 
(including the terminating null-character).
*stream : Pointer to a FILE object that identifies an input stream.
stdin can be used as argument to read from the standard input.

returns : the function returns str
  • 它遵循一些参数,例如最大长度,缓冲区,输入设备参考。
  • 使用安全,因为它可以检查数组绑定。
  • 它继续读书,直到换行字符遇到或字符数组的上限。

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

// C program to illustrate
// fgets()
#include 
#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 GeeksforGeeks

Output:
Hello and welc

gets()

读取来自标准输入(stdin),并将它们存储为C字符串到STR字符,直到一个新行字符或到达结束文件。
句法:

char * gets ( char * str );
str :Pointer to a block of memory (array of char) 
where the string read is copied as a C string.
returns : the function returns str
 
  • 使用不安全,因为它不检查数组绑定。
  • 它用于直到没有遇到字符从用户阅读的字符串。

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

// C program to illustrate
// gets()
#include 
#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 GeeksforGeeks

Output:
Hello and welcome to GeeksforGeeks
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。