C 用偏移量写入文件
我试图编写一个简单的代码块,将数组的内容写入文件中的某个位置。该文件是一个简单的纯文本文件。它似乎完成了所有的写操作,但文件内容最终以十六进制结束,开头有一堆零。我正在使用以下命令:C 用偏移量写入文件,c,file-io,C,File Io,我试图编写一个简单的代码块,将数组的内容写入文件中的某个位置。该文件是一个简单的纯文本文件。它似乎完成了所有的写操作,但文件内容最终以十六进制结束,开头有一堆零。我正在使用以下命令: FILE * fp; // file to write to void fwritel(long offset, char * data) { fp = fopen(filename, "w"); fseek(fp, offset, SEEK_SET); fwrite(data, 1,
FILE * fp; // file to write to
void fwritel(long offset, char * data) {
fp = fopen(filename, "w");
fseek(fp, offset, SEEK_SET);
fwrite(data, 1, strlen(data) - 1, fp);
fclose(fp);
}
我还使用了一个不起作用的pwrite变体:pwritefp,data,strlenda-1,offset;我正在寻找的代码将只在偏移位置写入数据,将文件从偏移位置修改为偏移+strlenda。这是一个多部分修复: 约阿希姆·皮勒博德是对的。使用fopenfile打开文件,w将销毁文件的内容。所以每次它都会打开文件,将文件归零,然后写入新内容 M Oehm也是正确的,新内容将用零填充-因此Sublime将其视为十六进制 因此,只需使用
fseek(fp, offset, SEEK_SET);
fwrite(data, 1, strlen(data), fp);
关闭程序末尾附近的某个位置的文件会产生正确的输出。使用fputc“”可以工作,但您需要确保我没有替换您需要的字符,即以前在文件的这些部分中放置的数据。阅读更多关于其打开模式的信息!你期待什么?查找文件中的某个位置,然后写入,如果有空白,则用零填充空白。文本编辑器看到这些零并认为它是二进制数据,显示为十六进制。如果要在字符串前面加空格,请使用fputc“”偏移时间而不是查找。也许fprintf对您更有用?如果您正在创建格式化的文本文件,这将有助于防止文件中出现不可打印的字符。