在C编程中,fgets()和gets()函数

简介

我们都熟悉scanf()函数。它是主要用于接收基本用户输入的函数。尽管scanf()在接收整数、字符、浮点数等输入时很好用,但是在接收包含空格的字符串输入时就显得有些不足。让我们来看一个例子。

#include<stdio.h>
int main()
{
    char string[10];
    printf("Enter the string: ");
    scanf("%s", string);
    printf("\n %s",string);
    return 0;
}

输出:通过在中国境内进行本地化翻译,只需提供一个选项。

Problem With Scanf

从上面的例子中,我们可以观察到scanf()遇到空格或换行符时会停止扫描。实际上,这使得使用scanf()获取字符串输入有点麻烦。可以通过使用其他输入函数如gets()和fgets()来轻松避免这个问题。

在本文中,我们将学习如何应用这两个功能并将它们进行并排比较。

在C语言中,gets()函数

gets()是C语言中的一个预定义函数,用于读取字符串或文本行,并将输入存储在一个预定义的字符串变量中。只要遇到换行符,该函数就会终止读取。

句法结构:

获取(变量名称)的值。

下面给出的代码示例展示了如何使用gets()函数。

#include<stdio.h>
int main()
{
    char string[10];
    printf("Enter the String: ");
    gets(string);
    printf("\n%s",string);
    return 0;
}

产出:

Use Of Gets()

将使用scanf()时的输出与此进行比较。”Hello World”现在被视为一个单独的字符串。

在C语言中的fgets()函数

标准C库还提供另一个函数,即fgets()函数。该函数从指定的文件或控制台中读取文本行或字符串,并将其存储到相应的字符串变量中。

类似于gets()函数,fgets函数也会在遇到换行符时终止读取。但是,与gets()不同的是,即使遇到EOF或字符串长度超过指定限制n-1,该函数也会停止读取。

句法

从指定的文件流中读取字符,并将其存储在一个字符串中,直到遇到换行符、文件结束符或者读取的字符数量达到指定的上限为止。

  • str – It is the variable in which the string is going to be stored
  • n – It is the maximum length of the string that should be read
  • stream – It is the filehandle, from where the string is to be read.

幸运的是,我们可以使用fgets()函数从文件或标准输入流中读取文本行。让我们看看该如何操作。

使用fgets()从给定文件中读取

例如,

#include<stdio.h>
int main()
{
    char string[20];
    FILE *fp;
    fp=fopen("file.txt","r");
    fgets(string,20,fp);
    printf("The string is: %s",string);
    fclose(fp);
    return 0;
}
    

假设file.txt文件中包含一行文本‘JournalDev fgets()示例!’。在这种情况下,上述代码的输出将是,

Fgets Output

用fgets()函数从stdin读取输入

#include<stdio.h>
int main()
{
    char string[20];
    printf("Enter the string: ");
    fgets(string,20,stdin);         #input from stdin stream
    printf("\nThe string is: %s",string);
    return 0;
}

输出:只需要一个选项。

Fgets() Stdin Input

结论

尽管gets()和fgets()两个函数都可用于读取字符串输入,但两者之间最大的区别在于后者允许用户指定缓冲区大小。因此,强烈建议使用fgets()函数。

gets()函数没有解决输入超出缓冲区的情况。结果可能会造成内存堵塞。这就是fgets()函数发光并提供了最终解决方案的部分。

参考文献

  • /community/tutorials/strings-in-c-programming
  • https://stackoverflow.com/questions/19748307/use-of-fgets-and-gets
发表回复 0

Your email address will not be published. Required fields are marked *