| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1163 人关注过本帖
标题:用库函数实现文件的copy,段错误,请教大神啊!
取消只看楼主 加入收藏
lzm0707
Rank: 2
等 级:论坛游民
帖 子:20
专家分:33
注 册:2012-2-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
用库函数实现文件的copy,段错误,请教大神啊!
程序代码:
#include<stdio.h>
#define LENGTH 1024
int main(int argc, char*argv[])
{
    FILE *from_fp,*to_fp;
    char ch,ptr[LENGTH];
    size_t rsize;
    if(argc!=3)
    {
    printf("input error\n");
    exit(1);}
    if((from_fp=fopen(argv[1],"rt"))==NULL)//打开目标文件
        {printf("cannot open file");
        exit(1);}
    if((to_fp=fopen(argv[2],"w+"))==NULL)//打开要写入的文件
        {printf("cannot creat file");
        exit(1);}
    
    while(rsize!=NULL)
    {     
          rsize=fread(ptr,LENGTH,1,argv[1]);//从目标文件中读数据
     fwrite(ptr,LENGTH,1,argv[2]);//写入数据
    }
fclose(from_fp);
fclose(to_fp);
    exit(0);
}


一直提示段错误,在fread那个函数那,在linux下编的,初学者,还不太会用gdb调试,找了半天也找不到问题出在哪,
请教大神们啊。
搜索更多相关主题的帖子: 1024 color 
2012-04-05 14:00
lzm0707
Rank: 2
等 级:论坛游民
帖 子:20
专家分:33
注 册:2012-2-28
收藏
得分:0 
回复 2楼 embed_xuel
多谢指点,是我太大意了。
但改为from_fp和to_fp之后,程序没问题了,但执行时,复制文件的时候会在文件复制完之后多复制了许多乱码过来,这是怎么回事呢?
2012-04-05 14:44
lzm0707
Rank: 2
等 级:论坛游民
帖 子:20
专家分:33
注 册:2012-2-28
收藏
得分:0 
回复 4楼 TonyDeng
不懂,我看资料上说fread函数返回值是实际读到的字节数,我以为执行fread 到时候遇到文件结束符会自己停止。但好像又不是这样,我用gdb调的时候,好像是如果文件没读完放回值是1,读完了返回值是0.
还有,那我怎么实现文件的复制呢,每个文件的字节数都不一样啊
2012-04-05 15:19
lzm0707
Rank: 2
等 级:论坛游民
帖 子:20
专家分:33
注 册:2012-2-28
收藏
得分:0 
回复 6楼 TonyDeng
我试过,把fwrite里的LENGTH换成rsize,这样跟本实现不了复制了,好像是执行fread的时候读没读完文件,返回值是1,读完了文件返回值是0.
2012-04-05 15:28
lzm0707
Rank: 2
等 级:论坛游民
帖 子:20
专家分:33
注 册:2012-2-28
收藏
得分:0 
回复 8楼 TonyDeng
程序代码:
#include<stdio.h>
#define LENGTH 10
int main(int argc, char*argv[])
{
    FILE *from_fp,*to_fp;
    char ch,*ptr;
    size_t wsize,rsize;
    if(argc!=3)
    {
    printf("input error\n");
    exit(1);}
    if((from_fp=fopen(argv[1],"rt"))==NULL)
        {printf("cannot open file");
        exit(1);}
    if((to_fp=fopen(argv[2],"w+"))==NULL)
        {printf("cannot creat file");
        exit(1);}
    
    while(rsize!=NULL)
    {     
          rsize=fread(ptr,LENGTH,1,from_fp);
     printf("%d",rsize); 
    fwrite(ptr,sizeof(char),rsize,to_fp);
    }
fclose(from_fp);fclose(to_fp);
    exit(0);
}


按你说的改了也不行,我把LENGTH改为10,加了个printf,输出的全是1,最后一个是0.
是不是fread 的返回值有啥不对啊
2012-04-05 15:49
lzm0707
Rank: 2
等 级:论坛游民
帖 子:20
专家分:33
注 册:2012-2-28
收藏
得分:0 
回复 12楼 TonyDeng
多谢指点啊,是我看的资料没写明白,所以我理解错了。
看了你解释,终于懂了。多谢!
2012-04-05 18:37
快速回复:用库函数实现文件的copy,段错误,请教大神啊!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022799 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved