标准I/O之 fgets() 函数

函数原型
#include <stdio.h>
char *fgets(char *buffer, int size, FILE *stream);
参数
  • buffer
      指向字符数组的指针,该数组存储要读取的字符串。
  • size
      要读取的最大字符数,即有效字符数是size - 1,最后一个字符为’\0’。
  • stream
      一个指向FILE对象的指针。
函数功能

  fgets()函数从指定的流stream中读取一行,并把它存储在buffer指向的字符串内,当读取size - 1个字符时,或者读取到换行符时,或者读取到文件末尾时,它会停止。

返回值

  若成功,返回buffer。
  若出错或读到文件末尾,返回NULL。

举例1

profile.txt

abcdefg
hijklmn

main.c

#include <stdio.h>
#include <string.h>

#define MAX 4
int main()
{
    FILE *profile = NULL;

    // 打开文件 
    profile = fopen("./profile", "r");
    if (profile == NULL)
    {
        printf("文件打开失败!\n");
        return -1;
    }

    // 获取当前文件指针位置
    long position = ftell(profile);
    printf("打开文件时,文件指针位置在%ld处。\n", position);

    char line_buffer[MAX];
    memset(line_buffer, '\0', sizeof(line_buffer));
    int counter = 0;
    while(fgets(line_buffer, MAX, profile) != NULL)
    {
        counter += 1;
        // 获取当前文件指针位置
        position = ftell(profile);
        printf("第%d次使用fgets读一行后,文件指针位置在%ld处。\n", counter, position);
        printf("第%d次读了%ld个字符,分别为十六进制数:", counter, strlen(line_buffer));
        for (int i = 0; i < strlen(line_buffer); ++i)
            printf("0x%x ", line_buffer[i]);
        printf("\n\n");
        memset(line_buffer, '\0', sizeof(line_buffer));
    }

    if (profile)
        fclose(profile);

    return 0;
}

运行结果

打开文件时,文件指针位置在0处。
第1次使用fgets读一行后,文件指针位置在3处。
第1次读了3个字符,分别为ASCII码的十六进制表示:0x61 0x62 0x632次使用fgets读一行后,文件指针位置在6处。
第2次读了3个字符,分别为ASCII码的十六进制表示:0x64 0x65 0x663次使用fgets读一行后,文件指针位置在8处。
第3次读了2个字符,分别为ASCII码的十六进制表示:0x67 0xa4次使用fgets读一行后,文件指针位置在11处。
第4次读了3个字符,分别为ASCII码的十六进制表示:0x68 0x69 0x6a5次使用fgets读一行后,文件指针位置在14处。
第5次读了3个字符,分别为ASCII码的十六进制表示:0x6b 0x6c 0x6d6次使用fgets读一行后,文件指针位置在16处。
第6次读了2个字符,分别为ASCII码的十六进制表示:0x6e 0xa7次使用fgets读一行后,文件指针位置在17处。
第7次读了1个字符,分别为ASCII码的十六进制表示:0xa

图示
图示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值