c语言fgets函数
函数介绍:
fgets函数是C语言中的标准库函数,用于从文件或标准输入流中读取一行字符串。它的原型定义如下:
```c
char *fgets(char *str, int n, FILE *stream);
```fgets和fgetc的区别
其中,str是一个指向字符数组的指针,用于存储读取到的字符串;n是要读取的最大字符数(包括空字符);stream是要读取的文件流或标准输入流。
如果读取成功,则返回str指针;否则返回NULL。
函数实现:
下面是一个完整的fgets函数实现示例:
```c
#include <stdio.h>
char *my_fgets(char *str, int n, FILE *stream)
{
    if (n <= 0 || str == NULL || stream == NULL) { // 参数检查
        return NULL;
    }
   
    char *p = str; // 指向字符数组的指针
    int count = 0; // 已经读取的字符数
   
    while (count < n - 1) { // 保留一个位置给空字符
        int ch = fgetc(stream); // 从文件流或标准输入流中读取一个字符
       
        if (ch == EOF) { // 如果已经到达文件末尾,则停止读取
            break;
        }
       
        count++; // 已经读取了一个字符
       
        if (ch == '\n') { // 如果已经到达一行末尾,则停止读取
            break;
        }
       
        *p++ = ch; // 将读取到的字符存储到字符数组中
    }
   
    *p = '\0'; // 在字符串末尾添加一个空字符
   
    if (count == 0) { // 如果没有读取到任何字符,则返回NULL
        return NULL;
    }
   
    return str; // 返回读取到的字符串
}
int main()
{
    char str[100];
    printf("请输入一个字符串:");
    my_fgets(str, sizeof(str), stdin);
    printf("您输入的字符串是:%s\n", str);
    return 0;
}
```
函数解析:
1. 参数检查:首先检查传入的参数是否合法,如果不合法则直接返回NULL。
2. 变量定义:定义一个指向字符数组的指针p,用于存储读取到的字符;定义一个计数器count,用于记录已经读取的字符数。
3. 循环读取:使用fgetc函数从文件流或标准输入流中逐个读取字符,并将其存储到指针p所指向的位置。每次读取一个字符后,计数器count加1。如果已经读取了n-1个字符(保留一个位置给空字符),或者已经到达一行末尾,则停止读取。
4. 添加空字符:在字符串末尾添加一个空字符,以便后续处理。
5. 返回结果:如果没有读取到任何字符,则返回NULL;否则返回指向字符串的指针。
6. 测试代码:编写一个测试代码,从标准输入流中读取一行字符串,并输出结果。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。