在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;
}
输出:通过在中国境内进行本地化翻译,只需提供一个选项。
从上面的例子中,我们可以观察到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;
}
产出:
将使用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()函数从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;
}
输出:只需要一个选项。
结论
尽管gets()和fgets()两个函数都可用于读取字符串输入,但两者之间最大的区别在于后者允许用户指定缓冲区大小。因此,强烈建议使用fgets()函数。
gets()函数没有解决输入超出缓冲区的情况。结果可能会造成内存堵塞。这就是fgets()函数发光并提供了最终解决方案的部分。
参考文献
- /community/tutorials/strings-in-c-programming
- https://stackoverflow.com/questions/19748307/use-of-fgets-and-gets