fgets() и gets() в программировании на C
Введение
Мы все знакомы с функцией 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()
— это предопределенная функция в 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» теперь обрабатывается как одна строка.
функция fgets() в C
Стандартная библиотека C также предоставляет нам еще одну функцию, функцию fgets()
. Функция читает текстовую строку или строку из указанного файла или консоли. А затем сохраняет его в соответствующей строковой переменной.
Подобно функции gets()
, fgets также прекращает чтение всякий раз, когда встречает символ новой строки. Но, кроме того, в отличие от gets()
, функция также останавливается при достижении EOF или даже если длина строки превышает указанный предел, n-1.
Синтаксис,
fgets(char *str, int n, FILE *stream)
- str — это переменная, в которой будет храниться строка.
- n — это максимальная длина строки, которая должна быть прочитана.
- поток — это дескриптор файла, из которого должна быть прочитана строка.
К счастью, мы можем читать текстовые строки как из файла, так и из стандартного потока ввода, используя функцию fgets()
. Давайте посмотрим, как
1. Чтение из заданного файла с помощью 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() example!». В этом случае вывод приведенного выше кода будет таким:
2. Чтение со стандартного ввода с помощью fgets()
#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()
, могут использоваться для чтения входных строк. Самая большая разница между ними заключается в том, что последний позволяет пользователю указать размер буфера. Поэтому настоятельно рекомендуется вместо функции gets()
.
Функция gets()
не поддерживает случай, когда входные данные больше размера буфера. В результате может произойти засорение памяти. Это та часть, где функция fgets()
сияет и обеспечивает окончательное решение.
Рекомендации
- /community/tutorials/strings-in-c-programming
- https://stackoverflow.com/questions/19748307/use-of-fgets-and-gets