unix下用c程序如何实现一行一行的复制数据

angel518 2009-06-09 05:17:20
偶在一个程序中生成一个临时文件,文件以“\n”作为每行换行符号,有的行直接就一个“\n”符号(就是空白行的意思)。
用UE打开都是正常的。
现在需要一行一行读这个临时文件,并把读到的行写入新文件中,语句如下:
for(a=0;a<25;a++){
fputs(fgets(buf,1024,tempFp),newFp);

(tempFp指向被读的临时文件,newFp指向要写入的文件)
可运行完后,打开newFp所指向的文件,发现写入都是乱码,怎么回事?


...全文
53 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
brookmill 2009-06-10
  • 打赏
  • 举报
回复
楼主有没有fclose(newFp);

这种问题用gdb调试不难解决。
如果不想用gdb,也可以这么调试一下:
for(a=0;a <25;a++){
fputs(fgets(buf,1024,tempFp),newFp);
puts(buf);

一边写文件一边输出。如果输出乱码就是读文件的问题,否则就是写文件的错误
mymtom 2009-06-10
  • 打赏
  • 举报
回复

#include <stdio.h>

#define LINESIZE 511
int
main(int argc, char *argv[])
{
FILE *fpin, *fpout;
char buf[LINESIZE + 1], *ptr;

if (argc >= 2)
{
fpin = fopen(argv[1], "rb");
if (NULL == fpin)
{
perror(argv[1]);
return (1);
}
}
else
{
fpin = stdin;
}

if (argc >= 3)
{
fpout = fopen(argv[2], "wb");
if (NULL == fpout)
{
perror(argv[2]);
return (1);
}
}
else
{
fpout = stdout;
}

for (;;)
{
ptr = fgets(buf, sizeof(buf), fpin);
if (NULL != ptr)
{
fputs(buf, fpout);
}
else
{
break;
}
}
fclose(fpin);
fclose(fpout);

return 0;
}
brookmill 2009-06-09
  • 打赏
  • 举报
回复
从楼主给出的两行代码来看,唯一的问题是没有判断fgets的返回值
如果源文件不到25行,fgets返回NULL,就可能会挂掉
不过乱码不像是这个原因造成的

请楼主补充关键代码:
tempFp = fopen(????);
newFp = fopen(????);
puheavy123 2009-06-09
  • 打赏
  • 举报
回复
用bash我可以实现,用c我不会。。。。
angel518 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wenxy1 的回复:]
你的临时文件是文本文件,还是二进制文件。
若是二进制文件,显示出来当然是乱码。
[/Quote]
偶的临时文件是文本文件

写入的时候是一个一个字符写入的,但后面读时按行处理很方便控制,效率也高些啊,所以想一行一行进行复制
可为什么会这样呢
  • 打赏
  • 举报
回复
以2进制方式打开文件。
once_and_again 2009-06-09
  • 打赏
  • 举报
回复

怎么 写入 的怎么读取吧?
Wenxy1 2009-06-09
  • 打赏
  • 举报
回复
你的临时文件是文本文件,还是二进制文件。
若是二进制文件,显示出来当然是乱码。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧