For reading a string value with spaces, we can use either gets() or fgets() in C programming language. Here, we will see what is the difference between gets() and fgets().
fgets()
The fgets() reads a line from the specified stream and stores it into the string pointed to by str. It stops when either (n-1) characters are read, the newline character is read, or the end-of-file is reached, whichever comes first.
Syntax
char *fgets (char *str, int n, FILE *stream);
Parameters
- 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.
Note: stdin can be used as argument to read from the standard input.
Return Value
- The fgets() function returns a pointer to the string where the input is stored.
Features of fgets()
- It follows some parameters such as Maximum length, buffer, and input device reference.
- It is safe to use because it checks the array bound.
- It keeps on reading until a new line character is encountered or the maximum limit of the character array.
Example of fgets()
Let’s say the maximum number of characters is 15 and the input length is greater than 15 but still fgets() will read only 15 characters and print it.
C
#include <stdio.h>
#define MAX 15
int main()
{
char buf[MAX];
fgets (buf, MAX, stdin);
printf ( "string is: %s\n" , buf);
return 0;
}
|
Since fgets() reads input from the user, we need to provide input during runtime.
Input:
Hello and welcome to GeeksforGeeks
Output:
string is: Hello and welc
gets()
Reads characters from the standard input (stdin) and stores them as a C string into str until a newline character or the end-of-file is reached.
- It is not safe to use because it does not check the array bound.
- It is used to read strings from the user until a newline character is not encountered.
Syntax
char *gets( char *str );
Parameters
- str: Pointer to a block of memory (array of char) where the string read is copied as a C string.
Return Value
- The function returns a pointer to the string where input is stored.
Example of gets()
Suppose we have a character array of 15 characters and the input is greater than 15 characters, gets() will read all these characters and store them into a variable. Since, gets() does not check the maximum limit of input characters, at any time compiler may return buffer overflow error.
C++
#include <stdio.h>
#define MAX 15
int main()
{
char buf[MAX];
printf ( "Enter a string: " );
gets (buf);
printf ( "string is: %s\n" , buf);
return 0;
}
|
Since gets() reads input from the user, we need to provide input during runtime.
Input:
Hello and welcome to GeeksforGeeks
Output:
Hello and welcome to GeeksforGeeks
Conclusion
Both fgets() and gets() functions can be used for reading string input from standard input. The main difference between fgets() function and gets() function is that fgets() function allows the user to specify the maximum number of characters to read and we can also change the input stream to any file in fgets().
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape,
GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out -
check it out now!
Last Updated :
06 Jun, 2023
Like Article
Save Article