VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 524|回复: 2

[已解决]实用C++的第45课小作业

[复制链接]
47_avatar_middle
最佳答案
0 
在线会员 发表于 2021-2-3 20:17:23 | 显示全部楼层 |阅读模式
想请大家帮我看一下 为什么运行结果不正确 谢谢实用C++的第45课小作业

#include <iostream>
#include <fstream>
using namespace std;

void copy_file(const char* origin, const char* target); //复制文件:origin->target

int main()
{
        const char* file1 = "123.txt";  //原文件
        const char* file2 = "456.txt";  //目标文件
        copy_file(file1, file2);

        return 0;
}

void copy_file(const char* origin, const char* target)
{
        //读文件内容到缓冲区
        ifstream file_read;
        file_read.open(origin, ios::binary);
        file_read.seekg(0,ios::end);
        int fileorigin_size = file_read.tellg();
        cout << "原文件大小为:" << fileorigin_size << endl;
        file_read.seekg(0, ios::beg);
        char* buf = new char[fileorigin_size];
        file_read.read(buf, sizeof(buf));
        file_read.close();

        //缓冲区内容写入新文件
        ofstream file_write;
        file_write.open(target, ios::binary);
        file_write.write(buf, sizeof(buf));
        file_write.seekp(0, ios::end);
        int filetarget_size = file_write.tellp();
        cout << "目标文件大小为:" << filetarget_size << endl;
        file_write.close();

        delete []buf;
}

运行后无法完全将“123.txt”中内容复制到新文件,仅复制了4个字符。
最佳答案
31_avatar_small
2021-2-3 23:15:34
sizeof(buf) 得到的只是这个指针地址的大小,已给你改好了。
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;

  4. void copy_file(const char* origin, const char* target); //复制文件:origin->target

  5. int main()
  6. {
  7.     const char* file1 = "123.txt";  //原文件
  8.     const char* file2 = "456.txt";  //目标文件
  9.     copy_file(file1, file2);

  10.     return 0;
  11. }

  12. void copy_file(const char* origin, const char* target)
  13. {
  14.     //读文件内容到缓冲区
  15.     ifstream file_read;
  16.     file_read.open(origin, ios::binary);
  17.     file_read.seekg(0,ios::end);
  18.     int fileorigin_size = file_read.tellg();
  19.     cout << "原文件大小为:" << fileorigin_size << endl;
  20.     file_read.seekg(0, ios::beg);
  21.     char* buf = new char[fileorigin_size];
  22.     file_read.read(buf, fileorigin_size);
  23.     file_read.close();

  24.     //缓冲区内容写入新文件
  25.     ofstream file_write;
  26.     file_write.open(target, ios::binary);
  27.     file_write.write(buf, fileorigin_size);
  28.     file_write.seekp(0, ios::end);
  29.     int filetarget_size = file_write.tellp();
  30.     cout << "目标文件大小为:" << filetarget_size << endl;
  31.     file_write.close();

  32.     delete []buf;
  33. }
复制代码




上一篇:VS2019 编译QT程序如何实现静态编译
下一篇:大佬,帮帮忙,救救孩子吧
31_avatar_middle
最佳答案
45 
在线会员 发表于 2021-2-3 23:15:34 | 显示全部楼层    本楼为最佳答案   
bestAnswer
sizeof(buf) 得到的只是这个指针地址的大小,已给你改好了。
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;

  4. void copy_file(const char* origin, const char* target); //复制文件:origin->target

  5. int main()
  6. {
  7.     const char* file1 = "123.txt";  //原文件
  8.     const char* file2 = "456.txt";  //目标文件
  9.     copy_file(file1, file2);

  10.     return 0;
  11. }

  12. void copy_file(const char* origin, const char* target)
  13. {
  14.     //读文件内容到缓冲区
  15.     ifstream file_read;
  16.     file_read.open(origin, ios::binary);
  17.     file_read.seekg(0,ios::end);
  18.     int fileorigin_size = file_read.tellg();
  19.     cout << "原文件大小为:" << fileorigin_size << endl;
  20.     file_read.seekg(0, ios::beg);
  21.     char* buf = new char[fileorigin_size];
  22.     file_read.read(buf, fileorigin_size);
  23.     file_read.close();

  24.     //缓冲区内容写入新文件
  25.     ofstream file_write;
  26.     file_write.open(target, ios::binary);
  27.     file_write.write(buf, fileorigin_size);
  28.     file_write.seekp(0, ios::end);
  29.     int filetarget_size = file_write.tellp();
  30.     cout << "目标文件大小为:" << filetarget_size << endl;
  31.     file_write.close();

  32.     delete []buf;
  33. }
复制代码

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
58_avatar_small thzzl + 2 + 2 很给力!

查看全部评分

47_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-2-5 16:44:12 | 显示全部楼层
cpp2019 发表于 2021-2-3 23:15
sizeof(buf) 得到的只是这个指针地址的大小,已给你改好了。

谢谢实用C++的第45课小作业
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-9-22 23:18

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表