fgets() function in C
fgets() function is present in standard input and output library i.e, stdio.h library. It is a built-in function or pre-define function. It is used to read the specified stream from the user and store it in a string.
The function reads the string until the new-line character is entered or end of the file is reached, or the input reaches the given length of the string. In this function, we fix the string size before the execution of the code.
Syntax for fgets() function :
char *fgets( char *str, int n, FILE *stream);
return type is char so it return a string.
Parameters passed:
- str is used to store the array string.
- n is the size of the string.
- stream is the name of the file or stdin.
We use the file name as the parameter if we want to work on files.
If we don't want to work on files, then we pass the parameter as stdin.
Example on fgets() function:
// program to read a string using fgets() function.
#include <stdio.h>
#include <string.h>
#define max 50 // defining the size of the array string
int main () // main function
{
char s[max]; // string declaration.
printf("Enter a string : ");
// Reading the string
fgets(s,max,stdin); // function calling
// printing the string.
printf(" \nThe entered string is= %s", s);
return(0);
}
Output:
Enter a string: Hello, Welcome to JavaTpoint tutorials
The entered string is= Hello, Welcome to JavaTpoint tutorials
Let us try another test case.
In this test case, we are checking what happens if the string size exceeds the given length.
Output:
Enter a string : Test case 2 Hello, Welcome to JavaTpoint tutorials and Examples
The entered string is= Test case 2 Hello, Welcome to JavaTpoint tutorials
In this test case, we gave the input as Test case 2 Hello, Welcome to JavaTpoint tutorials and Examples, but in output, we got only Test case 2 Hello, Welcome to JavaTpoint tutorials because the fgets function reads only till up to tutorials because it has reached the given string size.
Advantages of fgets() function:
- There is no chance of getting the buffer overflow error.
- We can expect at least one output from fgets() function.
- fgets() function is safe to use.
- It checks the array bound of the input string.
- fgets() function reads the input character until the new line character is entered or size of the string is reached, or it reaches the end of the file
Difference between scanf() function and fgets() function:
By using scanf() function, we can read all data type values i.e. int, char, float and double. But while reading strings, it falls behind compared to fgets. The string contains spaces between the words.
The scanf() function reads till the first space fails to read after the space. At the same time, fgets() function is used to read the user input. By using fgets() function, we can read all data types, i.e. int, char, float and double. We can easily read the string using the fgets() function.
Example program to show scanf() vs fgets() function:
// program for string using scanf() function
// program for string using scanf() function
#include <stdio.h>
#define max 100
int main() {
int n; // string size declaration
char string1[max]; // string declaration
printf(" Enter the size of the string: ");
scanf("%d", &n); // string size
// reading the string using scanf function
printf(" \nEnter the string1: ");
scanf("%s",string1);
printf(" \nThe string entered using scanf() function= %s", string1);
return 0;
}
Output:
Enter the size of the string: 60
Enter the string1: Hello, Welcome to JavaTpoint tutorials and Examples
The string entered using fgets() function= Hello,
If we observe the console output screen, we can see that the input string is Hello, Welcome to JavaTpoint tutorials and Examples, but in the output, we got only Hello, because by using the scanf() function, we can read up to the space after that scanf() is not reading the characters.
While in the fgets() function, we can read the space character.
Example program to show usage of fgets() function on files.
// program on files using fgets() function
#include <stdio.h>
#define max 100
int main () {
FILE *j; // Existing the file name
char string1[max]; // string declaration
// opening the file write mode
j = fopen("file.txt" , "r");
if(j == NULL) // checking the existence of the file
{
perror("Error in opening the file "); // displaying the error message
return(-1);
}
If(j!=NULL)
{
printf(“ \nEnter the string: ”);
}
// Reading the string using fgets() function
if( fgets (string1, max, j)!=NULL ) // function call
{
printf("\nThe entered string is= %s", string1); // printing the string
}
fclose(j); // closing the file
return(0);
}
For this program, we have two cases
- If the input file does not exist in the directories.
- If the input file exist in the directories.
Let’s see the output of the two cases:
Test case 1: If file does not exist in the dictionary:
Output:
Error in opening the file: No such file or directories
Test case 2: If the file exists in the directories
Output:
Enter the string: Hello, Welcome to JavaTpoint tutorials and Examples
The entered string: Hello, Welcome to JavaTpoint tutorials and Examples
Conclusion:
In this article we learned the definition of fgets() function, working of the fgets() function, advantages of the fgets() function, examples on the fgets() function, difference between the scanf() function and fgets() function and usage of the fgets() function on files.