更多资料请点击:我的目录
本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢。

问题如图,输出后(第三行)后面输出有乱码。原因是所定义的数组、函数参数(输入、输出字符串长度等)是用变量的,输入字符串中含有空格,通俗地说就是到了字符串末尾时,read()函数分不清这是个空格还是结束符,然后就跟着一串乱码出来,如果你的字符串没有空格的话,它是不会出现乱码的。

解决办法:
①在read()函数前加入一句:
buf_r[len] = '\0'; //给数组buf_r[]最后一位赋值为'\0'换行符,当read()函数读到'\0'时,就停止读取,就不会输出乱码。
②将所有用变量定义的参数,改为定值 ,比如:

char buf_r[100]={0};        //变量 char buf_r[]={0};
size=read(fd,buf_r,100));  //变量 size=read(fd,buf_r,len));
size=read(fd,buf_r,100));  //变量 size=read(fd,buf_r,sizeof(buf_r))) ;


详细代码如下:

#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>int main(void){int i,fd,size,len;char *buf="Hello! I'm jiajiage.";char buf_r[]={0};//char buf_r[100]={0};//改为定值len = strlen(buf);/*******************open()********************************/if((fd=open("jiajia.c", O_CREAT | O_TRUNC | O_RDWR,0666))<0)  //创建打开jiajia.c文件(删除原有数据),文件可读可写{perror("open:");exit(1);}elseprintf("open file:jiajia.c %d\n",fd);//如果打开成功,返回值fd>0的文件描述符,也就是jiajia.c编号/*******************write()*********************************/if((size=write(fd,buf,len))<0)  //把buf字符串通过fd描述符写入jiajia.c中,写入的长度为字符串的长度。{perror("write:");exit(1);}elseprintf("Write:%s\n",buf);/******************lseek()*********************************/lseek( fd, 0, SEEK_SET );//通过write(fd,buf,len)函数之后,fd的指针偏移量直接指向写入的最后一个字符。现通过lseek()函数,根据参数重新把fd偏移量移到0位置(开头位置)/*******************resd()*********************************/buf_r[len] = '\0';//给数组buf_r[]最后一位赋值为'\0'换行符,当read()函数读到'\0'时,就停止读取。if((size=read(fd,buf_r,len))<0) //通过fd描述符把jiajia.c的字符串(write()函数写入的字符串)读取出来,然后把读取出来的字符串(小于10个字符)存放在r_buf字符串中。{perror("read:");exit(1);}elseprintf("read form file:%s\n",buf_r);/********************close()********************************/if(close(fd)<0)   //关闭打开jiajia.c函数{perror("close:");exit(1);}elseprintf("Close jiajia.c\n");/**********************退出函数******************************/exit(0);//退出//return 0;}

文件IO中read()函数读取输出字符串有乱码相关推荐

  1. python中读取文件过程中seek()函数的使用

    python中读取文件过程中seek()函数的使用 目录 概述: 语法: 参数: 返回值: 实例: 概述: seek() 方法用于移动文件读取指针到指定位置. 语法: seek() 方法语法如下: 文 ...

  2. Mysql 宕机引发索引丢失很可怕,文件 IO 中如何保证掉电不丢失数据?

    欢迎关注方志朋的博客,回复"666"获面试宝典 众所周知,存储设计离不开文件 IO,将数据存储到文件中进行持久化,是大多数消息队列.数据库系统的常规操作.为了更贴近实际的生产场景, ...

  3. 文件 IO 中如何保证掉电不丢失数据?

    前言 好久没有分享文件 IO 的小技巧了,依稀记得上次分享还是在上次. 第二届云原生编程挑战赛正在火热进行中,Kirito 也在做<针对冷热读写场景的RocketMQ存储系统设计>这个题目 ...

  4. 从Python中readline()函数读取的一行内容中去掉换行符\n

    从Python中readline()函数读取的一行内容中含有换行符\n,很多时候我们需要处理不含有换行符的字符串,此时就要去掉换行符\n. 方法是使用strip()函数. 例子如下: file = o ...

  5. MySQL中concat函数(连接字符串)

    MySQL中concat函数(连接字符串) MySQL中concat函数 使用方法: concat(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 ...

  6. Python提取文件夹中的所有文件名输出到excel

    Python提取文件夹中的所有文件名输出到excel import os import openpyxldef getfilelist(dir,file_out,sheet_out):filelist ...

  7. c语言习题 定义函数 areaT,功能是求梯形面积。要求在主函数中输入上底(用变量 a存储)、下底(用变量 b 存储)、和高(用变量 h 存储),在主函数中调用函数 areaT,输出梯形面积(用变量

    定义函数 areaT,功能是求梯形面积.要求在主函数中输入上底(用变量 a存储).下底(用变量 b 存储).和高(用变量 h 存储),在主函数中调用函数 areaT,输出梯形面积(用变量 s 存储)的 ...

  8. linux中read函数读取文件夹内文件,linux下read函数

    read函数是Linux下不带缓存的文件I/O操作函数之一,所谓的不带缓存是指一个函数只调用系统中的一个函数.另外还有open.write.lseek.close,它们虽然不是ANSI C的组成部分, ...

  9. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )

    文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...

最新文章

  1. python wait_window_pywinauto客户端自动化---窗口等待方法
  2. react native 常用学习或查资料网址
  3. Python文本预处理:步骤、使用工具及示例
  4. node开启子线程_真Node多线程
  5. 《ASP.NET 开发从入门到精通》----2.3 编译和部署ASP.NET程序
  6. 检查是否已使用jQuery选中复选框
  7. 二极管的反向恢复过程
  8. python if语句多个条件-Python中if有多个条件处理方法
  9. UA MATH567 高维统计II 随机向量8 图的Max-cut问题 0.5近似算法的运行时间分析
  10. Hive的基本操作-创建表的格式
  11. 【渝粤题库】陕西师范大学202231财务管理Ⅰ 作业(高起专)
  12. Js——elementFromPoint方法
  13. [Flex] flex的安全沙箱,你保障了安全的同时也害苦了多少我这样的人那
  14. 性能测试---性能指标【1】
  15. Linux硬件硬盘分区知识-总结
  16. 孔浩老师的java视频
  17. 百度人脸接口简单随笔
  18. 值得推荐的经济学中文教材-转
  19. puts()函数详解
  20. 干货分享:app推广新人如何做好应用商店推广

热门文章

  1. Ribbon默认负载均衡算法之轮训算法原理解析
  2. 视频如何做成gif动图?一招教你快速生成gif动画
  3. 两种常见电商sku的设计
  4. 记录PHP数据库操作显示could not find driver怎么办?
  5. 探索内存碎片化 - 第288篇
  6. UWA发布|Unity手游性能蓝皮书
  7. 毛不易被歌手淘汰?遗憾
  8. 商标买卖为何需要迅速使用
  9. 牛客网面试高频题top100(1~10)
  10. 【sql】统计温度比前一天高的id Rising Temperature