【发布时间】:2016-09-28 06:32:49
【问题描述】:
我要做的就是将一个 long int 写入偏移 0x18 和另一个单独的 long int 偏移 0x1C 到我打开的文件中。这些偏移量始终包含我正在处理的文件格式的相关数据,因此无需担心——我需要做的就是使这些地址处的值等于某个指定的数字。我打开文件没有问题,但我不确定如何完成,因为我对 C 不是很有经验。
现在我用 fopen() 以写入模式打开文件,用 fseek 寻找 0x18,用 fputs 写入“XXXXX”(XXXXX 只是一些数字),再次寻找 0x1C,再次做同样的事情,并关闭文件。我不仅觉得这种方法是错误的,而且它什么也没做,我也不知道为什么。我是对的,我应该以其他方式解决这个问题,还是我只是错过了什么?
编辑:代码:
void modify_data(unsigned long int samp1, unsigned long int samp2, char fname[]) {
FILE * newfile;
newfile = fopen(fname, "w");
fseek(newfile, 0x18, SEEK_SET);
fputs("180000", newfile); // 180000 is a placeholder while I test
fseek(newfile, 0x1C, SEEK_SET);
fputs("600000", newfile); // 600000 is a placeholder while I test
fclose(newfile);
}
int main(int argc, char * argv[]) {
char fname[sizeof(argv[1])];
strcpy(fname, argv[1]);
modify_data(0, 0, fname); // the first two arguments are placeholders while I test
return 0;
}
【问题讨论】:
-
缺少any 代码来显示您真正 在做什么对您的问题没有任何帮助。提供minimal, complete, and verifiable example 说明您所拥有的,以及到目前为止您为缩小问题范围所做的工作。
-
是什么让你认为这种做法是错误的?
-
顺便说一句:
fputs不是您需要的功能。您必须使用fwrite函数。 -
在我的机器上,对于机器类型
long,0x18 处的数据将与 0x1C 处的数据重叠。您必须使用 32 位系统。但是,fseek()和fwrite()是您需要的功能。 -
不,我使用的是 64 位系统。我可能弄错了,但我认为长整数是 32 位,长整数是 64;不过,我很可能弄错了。