为了读取带空格的字符串值,我们可以使用C编程语言中的gets()或fgets()。在这里,我们将看到gets()和fgets()有什么区别。
fgets()
它从指定的流中读取一行并将其存储到str指向的字符串中。当读取(n-1)个字符,读取换行符或到达文件末尾(以先到者为准)时,它将停止。
用法:
char *fgets(char *str, int n, FILE *stream) 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. stdin can be used as argument to read from the standard input. returns:the function returns str
- 它遵循一些参数,例如最大长度,缓冲区,输入设备参考。
- 使用安全,因为它可以检查数组绑定。
- 它将继续读取,直到遇到换行符或字符数组的最大限制为止。
示例:假设最大字符数为15,并且输入长度大于15,但是fgets()仍然只能读取15个字符并进行打印。
// C program to illustrate
// fgets()
#include <stdio.h>
#define MAX 15
int main()
{
char buf[MAX];
fgets(buf, MAX, stdin);
printf("string is:%s\n", buf);
return 0;
}
由于fgets()从用户读取输入,因此我们需要在运行时提供输入。
Input: Hello and welcome to GeeksforGeeks Output: Hello and welc
gets()
从标准输入(stdin)读取字符,并将它们作为C字符串存储到str中,直到到达换行符或文件末尾。
用法:
char * gets ( char * str ); str:Pointer to a block of memory (array of char) where the string read is copied as a C string. returns:the function returns str
- 使用不安全,因为它不检查数组绑定。
- 它用于从用户读取字符串,直到未遇到换行符为止。
示例:假设我们有一个由15个字符组成的字符数组,并且输入大于15个字符,则gets()将读取所有这些字符并将其存储到变量中,因为gets()不会检查输入字符的最大限制,因此在任何时候编译器都可能返回缓冲区溢出错误。
// C program to illustrate
// gets()
#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;
}
由于gets()从用户读取输入,因此我们需要在运行时提供输入。
Input: Hello and welcome to GeeksforGeeks Output: Hello and welcome to GeeksforGeeks
相关用法
注:本文由纯净天空筛选整理自Kanchan_Ray大神的英文原创作品 fgets() and gets() in C language。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。