fputs()函数这里为啥不需要单独的换行语句?

#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE*fp1,*fp2;
    char str[100];
    fp1=fopen("123.txt","r");
    fp2=fopen("456.txt","w");
    if(fp1==NULL)
    {
        printf("123.txt打开失败\n");
        exit(0);
    }
    if(fp2==NULL)
    {
        printf("456.txt打开失败\n");
        exit(0);
    }
    while(!feof(fp1))
    {
        fputs(fgets(str,100,fp1),fp2);
        //fputs("\n",fp2);//fputs()没有自动换行,这里为什么不用单独换行语句文件写入依旧正确 
    }
}

因为fgets函数读到'\n'时会把'\n'存入字符串,不像scanf, gets等函数会把'\n'丢回输入序列