fputs和fgets函数详解

585 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天,点击查看活动详情

大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:


fputs - 写一行数据

image-20220310223925836

  • 第一个参数:字符串
  • 第二个参数:文件指针

int main()
{
    //打开文件
    FILE* pf = fopen("data.txt", "w");
    //要进行判断是否打开成功
    if (NULL == pf)
    {
        perror("fopen");
        return -1;
    }
    //写文件
    //写一行数据
    fputs("Mango",pf);
    fputs("Lemon",pf);  
    //关闭文件
    fclose(pf);
    pf = NULL;	//手动置空
    return 0;
}

执行后的结果:

image-20220310223934776


并没有为我们加上换行,如果想要有换行->

自己手动添加换行,\n作为内容写入到文件中

int main()
{
    //打开文件
    FILE* pf = fopen("data.txt", "w");	
    //要进行判断是否打开成功
    if (NULL == pf)
    {
        perror("fopen");
        return -1;
    }
    //写文件
    //写一行数据
    fputs("Mango\n",pf);
    fputs("Lemon\n",pf);  
    //关闭文件
    fclose(pf);
    pf = NULL;	//手动置空
    return 0;
}

image-20220310223941095

以w为打开方式:再次打开该文件时,原来的内容被销毁


fgets - 读一行数据

image-20220310223947471

  • 第一个参数:从流中读取数据之后的保存空间
  • 第二个参数:最多读取的字符
  • 第三个参数:文件指针

注意:n:最多读取的字符个数,实际只读取n-1个,然后在最后位置放\0,保证是n个字符


现在文件中存放的内容:

image-20220310223956307


例子1

int main()
{
    //打开文件
    FILE* pf = fopen("data.txt", "r");	//以只读方式打开
    //要进行判断是否打开成功
    if (NULL == pf)
    {
        perror("fopen");
        return -1;
    }
    //写文件
    //写一行数据
    char arr[20] = {0};
    fgets(arr,5,pf);
    printf("%s\n",arr);
    
    fgets(arr,5,pf);
    printf("%s\n",arr);
    //关闭文件
    fclose(pf);
    pf = NULL;	//手动置空
    return 0;
}

执行结果:

image-20220310224006107


现在n为5:最多读取5个字符,但实际只读取4个,然后放\0,保证是5个字符

第二次再读取时:指针指向的是o位置,

fgets是读取一行的数据,所以之后读取现在所在行,并不会读取下一行

image-20220310224015432


例子2:

当n大于一行中字符的长度时,并不会换行读取,最多把一整行读取出来。读取完第一行之后,下一次读取是在第二行读取

int main()
{
    //打开文件
    FILE* pf = fopen("data.txt", "r");	//以只读方式打开
    //要进行判断是否打开成功
    if (NULL == pf)
    {
        perror("fopen");
        return -1;
    }
    //写文件
    //写一行数据
    char arr[20] = { 0 };
    fgets(arr, 9, pf);
    printf("%s\n", arr);

    fgets(arr,8 , pf);
    printf("%s\n", arr);
    //关闭文件
    fclose(pf);
    pf = NULL;	//手动置空
    return 0;
}

image-20220310224025559

由于txt文件中的末尾有\n,而打印时又加了\n,所以中间有空行,同理读取第二行时也是。