一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天,点击查看活动详情。
大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN C/C++领域新星创作者blog.csdn.net/chuxinchang…
- 掘金LV3用户 juejin.cn/user/138142…
- 阿里云社区专家博主,星级博主,技术博主 developer.aliyun.com/profile/exp…
- 华为云云享专家 bbs.huaweicloud.com/community/m…
fputs - 写一行数据
- 第一个参数:字符串
- 第二个参数:文件指针
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;
}
执行后的结果:
并没有为我们加上换行,如果想要有换行->
自己手动添加换行,\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;
}
以w为打开方式:再次打开该文件时,原来的内容被销毁
fgets - 读一行数据
- 第一个参数:从流中读取数据之后的保存空间
- 第二个参数:最多读取的字符
- 第三个参数:文件指针
注意:n:最多读取的字符个数,实际只读取n-1个,然后在最后位置放\0,保证是n个字符
现在文件中存放的内容:
例子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;
}
执行结果:
现在n为5:最多读取5个字符,但实际只读取4个,然后放\0,保证是5个字符
第二次再读取时:指针指向的是o位置,
fgets是读取一行的数据,所以之后读取现在所在行,并不会读取下一行
例子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;
}
由于txt文件中的末尾有\n,而打印时又加了\n,所以中间有空行,同理读取第二行时也是。