前言
前面验证了fgets fputs gets puts 是否把新行符存入缓存的结论
并且都得出了结果。
这次继续验证 fprintf sprintf 是否是行缓存??
fprintf 函数
先用之前的方法试试 输出
#include<stdio.h>
int main()
{
FILE *fd=NULL;
fd = fopen("g.c","w+");
if(fd==NULL)
{
printf("fopen is error\n");
return -1;
}
printf("fopen is sueecssed\n");
return 0;
}
换成 fprintf 试试
#include<stdio.h>
int main()
{
FILE *fd=NULL;
int i = 111;
fd = fopen("a.c","w+");
if(fd==NULL)
{
printf("fopen is error\n");
return -1;
}
fprintf(fd,"fopen is sueecssed is %d\n",i);
flcose(fd);
return 0;
}
fprintf 函数 fd 相当于是一个存放的地址 而这个地址又是g.c 的
所以在g.c可以看到 输出的内容。
没加 while(1);有数据
怎么证明他是不是行缓存呢 满足行缓存的要求都去掉 这里把 换行符去掉 并在后面加 while(1);
#include<stdio.h>
int main()
{
FILE *fd=NULL;
int i=111;
fd = fopen("a.c","w+");
if(fd==NULL)
{
printf("fopen is error\n");
return -1;
}
fprintf(fd,"fopen is sueecssed is %d",i);
while(1);
fclose(fd);
return 0;
}
并没数据 因为没把缓存写入内核态. 证明了它就行缓存。
sprintf 函数
#include<stdio.h>
int main()
{
int a=10;
char readbuff[128]={0};
fprintf(readbuff,"fopen is sueecssed is %d",a);
printf("%s\n",readbuff);
return 0;
}
spinrtf 只是一个存放字符的函数 还需要 printf 把他的字符输出
readbuff 是一个存放的地址
如果 加了 while(1);呢
#include<stdio.h>
int main()
{
int a=100;
char readbuff[128];
fprintf(readbuff,"fopen is sueecssed is %d\n",a);
printf("%s",readbuff);
while(1);
return 0;
}
加了while (1);还是会输出 证明了 它是行缓存。