吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1427|回复: 8
收起左侧

[已解决] 滴水初级3.10课后题,运行下面两种代码后为什么会出现这种问题

 关闭 [复制链接]
d173220523 发表于 2020-4-24 12:18
本帖最后由 d173220523 于 2020-4-28 21:36 编辑

2、将记事本的.exe文件读取到内存,并返回读取后在内存中的地址.
3、将内存中的数据存储到一个文件中,(.exe格式),然后双击打开,看是否能够使用.
[C] 纯文本查看 复制代码
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
struct node{ //换了一种方式,使用链表存储更加灵活 
    char data;
    struct node *next;
};
int main(){
    FILE *pFile = fopen("D://1.exe", "rb");
    FILE *wFile = fopen("D://2.exe", "ab+");
    char buf[5]; 
    int ret = 0;
    node *p = (node *)malloc(sizeof(node));
    node *head = p;
    while((ret = fread(buf, sizeof(char), 1, pFile))){
        node *x = (node *)malloc(sizeof(node));
        x->data = *buf;
        p->next = x;
        p = x;
    }
    p->next = NULL;
    head = head->next;
    while(head->next != NULL){
        fwrite(&(head->data), sizeof(char), 1, wFile);
        head = head->next;
    }
    return 0;
}
[C] 纯文本查看 复制代码
#include "stdafx.h"[/font][/color]#include "stdio.h"
#include <stdlib.h>

void pula()
{
        FILE *fp;
        FILE *fp1;
        //判断是否打开文件
        if ( (fp = fopen("c:\\123.exe", "rb")) == NULL )
                puts("Fail to open file!");


        //或者文件大小
        fseek(fp,0,2);
        int z = ftell(fp);
        //申请内存空间
        char* date = (char*)malloc(z);
        if(date == NULL)
                puts("申请失败");
        //让指针回到开头位置
        fseek(fp,0,0);
        //写入内存中
        for(int i = 0; i<z;i++)
        {
                fscanf(fp, "%c", (date+i));
                printf("写入内存成功\n");
        }
        //判断打开文件如果文件不存在就创建一个叫1111.exe的文件
        if ( (fp1 = fopen("c:\\1111.exe", "wb")) == NULL )
                puts("Fail to open file!");
        //写入数据
        for(i=0;i<z;i++)
        {
                fprintf(fp1,"%c",*(date+i));
                printf("写入文件成功\n");

        }
        free(date);//释放内存空间
        fclose(fp1);//操作结束后关闭文件
        fclose(fp);//操作结束后关闭文件
}


int main()
{
        pula();

        return 0;
}
L-2020-04-24-12-14-07.png
L-2020-04-24-12-15-56.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xunxunmimi0936 发表于 2020-4-24 12:41
好东西值得大家试用学习。

免费评分

参与人数 1吾爱币 -1 收起 理由
又红又专 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

nstar1221 发表于 2020-4-24 12:41
代码有点乱。思路是这样,把exe读出来,然后算一下大小,输出,重置文件指针,然后再把buffer直接存成文件就行了。小文件直接写就可以,没别要用循环
又红又专 发表于 2020-4-24 12:46
...........头一次看到
for (int i = 0; i < z; i++)
        {
                fscanf(fp, "%c", (date + i));
                printf("写入内存成功\n");
        }

这样把文件写入内存?
360截图20200424124334691.jpg
天赐淡雅香 发表于 2020-4-24 13:23
好东西值得学习。
斩风 发表于 2020-4-24 18:52
好东西,慢慢学习
nj001 发表于 2020-4-25 00:28
看提示是fseek执行错误了
 楼主| d173220523 发表于 2020-4-28 21:22
nstar1221 发表于 2020-4-24 12:41
代码有点乱。思路是这样,把exe读出来,然后算一下大小,输出,重置文件指针,然后再把buffer直接存成文件 ...

  fscanf(fp, "%c", (date ));
            
需不需要把%c改成%s?
nstar1221 发表于 2020-4-29 10:52
d173220523 发表于 2020-4-28 21:22
fscanf(fp, "%c", (date ));
            
需不需要把%c改成%s?

直接用fwrite就行
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 17:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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