gpt4 book ai didi

C++ fwrite 破坏二进制文件

转载 作者:行者123 更新时间:2023-11-30 04:10:40 24 4
gpt4 key购买 nike

我正在尝试打开一个 exe 文件并放置从用户那里获取的输入,并在特定位置替换相同长度的现有数据(覆盖它)。我可以用我的代码做到这一点,但我发现我文件的其他部分有数据损坏。这是我第一次使用 C++,我尝试尽我所能帮助自己,但我不知所措。我唯一能想到的是,它与 'char test1[100];' 末尾的空字符串 char 有关(如果我正确阅读文档)。但对我解决问题没有帮助。查看链接图像,例如来自输出和原始的十六进制查看器

    #include <stdio.h>
#include <string.h>

int main(void)

{
FILE *key;
key=fopen ("Testfile.exe","r+b");

char test1[100];
char test2[100];

printf("Test data to input:");
fgets(test1, sizeof test1, stdin);
printf("Second test data to input:");
fgets(test2, sizeof test2, stdin);

fseek (key,24523,SEEK_SET); //file offset location to begin write
fwrite (test1,1,sizeof(test1),key);
fseek (key,24582,SEEK_SET); //file offset location to begin write
fwrite (test2,1,sizeof(test2),key);
fseek (key,24889,SEEK_SET); //file offset location to begin write
fwrite (test2,1,sizeof(test2),key);

fclose(key);
printf ("Finished");
return(0);
}

在我最初的编辑之后,我仍然在与在我的字符串末尾写入一个 Null 终止符(从而影响编辑的 exe 文件的操作)作斗争。经过更多阅读后,这是我的最终解决方案,它按预期工作,没有写入任何奇怪的数据。我使用 scanf ("%10s") 来确保只使用我的字符串并删除任何空终止符。有没有人看到这里有什么重大错误或需要改进?最后我想实现字符串长度检查以确保用户输入正确的长度。感谢大家的帮助。

    #include <stdio.h>
#include <string.h>

int main(void)

{
FILE *key;
key=fopen ("test.exe","r+b");
char test1[10];
char test2[32];
printf("Input Test1 data:");
scanf ("%10s",test1); //only read 10 Chars
printf("Input test2 data:");
scanf ("%32s",test2); //only read 32 Chars
fseek (key,24523,SEEK_SET); //file offset location to begin write
fputs (test1,key);
fseek (key,24582,SEEK_SET); //file offset location to begin write
fputs (test2,key);
fseek (key,24889,SEEK_SET); //file offset location to begin write
fputs (test2,key);
fclose(key);
printf ("Finished");
return(0);
}

最佳答案

看起来您要将一个字符串写入 exe 文件,但实际上您正在编写一个用垃圾值填充的字符串,最长为 100 个字节。

如果您只想写入字符串,请将 fwrite 替换为 fputs

sizeof(array) 给出静态数组的分配大小(在本例中为 100),而不是字符串长度。字符串长度是通过 strlen() 完成的,它不包括终止 NULL 字符。

关于C++ fwrite 破坏二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20554126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com