fgets()函数 和 gets函数
时间: 2023-09-24 10:11:06 浏览: 33
fgets()函数和gets()函数都是C语言中用于从标准输入流中读取字符串的函数,但它们有一些区别。
1. fgets()函数
fgets()函数的函数原型为:
```c
char* fgets(char* str, int n, FILE* stream);
```
它从指定的文件流stream中读取n-1个字符或直到读到换行符为止,并将读取到的字符存储到str数组中,最后在str数组末尾添加一个空字符'\0'。如果读取到的字符数小于n-1,则fgets()会在读取完所有字符后自动添加一个空字符。
fgets()函数的优点是可以避免缓冲区溢出,因为它会限定读取的字符数。但fgets()函数会将换行符也读入字符串中,并且如果输入的字符串长度超过了n-1,fgets()会将剩余的字符留在输入缓冲区中。
2. gets()函数
gets()函数的函数原型为:
```c
char* gets(char* str);
```
它从标准输入流中读取一行字符,直到读到换行符为止,并将读取到的字符存储到str数组中,最后在str数组末尾添加一个空字符'\0'。gets()函数不会限定读取的字符数,因此可能导致缓冲区溢出。
gets()函数的缺点是容易导致缓冲区溢出,因为它不会限定读取的字符数。因此,在实际应用中,gets()函数不再被推荐使用。
综上所述,fgets()函数比gets()函数更为安全,更为常用。
相关问题
c语言fgets函数,gets和fgets区别
fgets和gets都是用来读取输入流的函数,但是它们有以下不同点:
1. gets函数不进行输入长度检查,容易导致缓冲区溢出,使程序崩溃,而fgets函数会检查输入长度,避免了缓冲区溢出的问题。
2. gets函数只能读取一行数据,而fgets函数可以读取指定长度的数据,即使数据不在同一行也可以读取完整。
3. gets函数不知道输入结束的位置,因此输入时需要按下回车键,而fgets函数可以读取指定长度的数据,不需要按下回车键。
因此,为了避免缓冲区溢出,建议使用fgets函数而不是gets函数。
fgets函数c语言
fgets()函数是C语言中用于从文件或标准输入读取一行文本的函数。它的语法如下:`char *fgets(char *str, int n, FILE *stream)`,其中str是一个指向字符数组的指针,用于存储读取的字符串;n是要读取的最大字符数;stream是一个指向文件的指针,或者是stdin(标准输入)。fgets()函数会读取指定的字符数或者遇到换行符('\n')为止,然后将读取的字符串存储到str中,并在字符串末尾添加一个null字符('\0')。
与gets()函数相比,fgets()函数更加安全,因为它可以避免缓冲区溢出的问题。当读取的字符数超过指定的最大字符数时,fgets()函数会自动停止读取,从而避免了缓冲区溢出的问题。此外,fgets()函数还可以从文件中读取一行文本,因此它比gets()函数更加灵活。
阅读全文