免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5400 | 回复: 11
打印 上一主题 下一主题

[C] 求助:从一个文件读取字符串按一定格式写到另一文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-07 10:13 |只看该作者 |倒序浏览
#include <stdio.h>
#include <string.h>
int main(void)
{
        FILE *fp,*fp1;
        char date1[6];
        char hchh1[6];
        char buffer[21];
        if( (fp=fopen("fp.txt", "r"))==NULL ){
                printf( "file  not found!\n" );
                exit(0);
}
        if( (fp1=fopen("fp1.txt", "w"))==NULL ){
                printf( "file  not found!\n" );
                exit(0);
}
while(!feof(fp))
{
memset(buffer,' ',21);
fgets(buffer,21,fp);
memcpy(date1,buffer,6);
memcpy(hchh1,buffer+6,6);
fprintf(fp1,"%6.6s%16.16s\n",date1,hchh1);
}
        fclose(fp);
        fclose(fp1);
return 1;
}
源文件
0809016310001310000a
0809021310006310000a
0809032320001234560a
0809043160002125100a
0809054510002545400a
生成的文件
080901          631000


080902          131000


080903          232000


080904          316000


080905          451000



中间多出两行,最后还多一行,不知道怎么回事,哪位高手指点一下,多谢了!!!

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
2 [报告]
发表于 2008-09-07 10:19 |只看该作者
feof用法的问题
搜索一下本版
以前有讨论过

论坛徽章:
0
3 [报告]
发表于 2008-09-07 10:44 |只看该作者
中间空二行是不是因为继续在写buffer后面的空格呢,要怎样才能不写

[ 本帖最后由 ykfm 于 2008-9-7 10:48 编辑 ]

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
4 [报告]
发表于 2008-09-07 11:15 |只看该作者
看错了
你是不是忘记了C的字符串是以'\0'结束的

论坛徽章:
0
5 [报告]
发表于 2008-09-07 12:49 |只看该作者
fgets(buffer,21,fp);改成fgets(buffer,80,fp);
输出正常了,谢谢yecheng_110

论坛徽章:
0
6 [报告]
发表于 2008-09-07 14:58 |只看该作者
问题出在21上。
每一行20个字符,你选21看上去刚好能读完,但是实际上每一行结束还有个'\n'
所以你下一次fgets的时候buffer里是\n,然后你就输出了\n,所以会多几行

实际上fgets自动以换行作为截至,所以我们可以多读一些。这也是为什么改成fgets(buffer,80,fp);问题解解决了

论坛徽章:
0
7 [报告]
发表于 2008-09-08 10:02 |只看该作者
谢谢wzcsoft的解释,我本来以为了21已经够了呢

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2008-09-08 10:11 |只看该作者
fgets是按行读取的,而且要设定读取的长度,如果在读入字符串长度还未到设定长度之前,遇上了'\n'就算读取结束了。因此,一般情况下要将length设的长一点

论坛徽章:
0
9 [报告]
发表于 2008-09-08 10:23 |只看该作者
并且最好不要用21

用2的倍数

论坛徽章:
0
10 [报告]
发表于 2008-09-08 13:10 |只看该作者
应该这样用吧
while(fgets(buffer,MAXLINE,fp) != NULL)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP