我正在尝试编写一个简单的代码块,将数组的内容写入文件中的某个位置。该文件是一个简单的纯文本文件。它似乎做了所有写入,但文件内容最终以十六进制结束(开头有一堆零)。我正在使用以下内容:
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
的变体,它不起作用:pwrite(fp, data, strlen(data) - 1, offset);
我正在寻找的代码只会在位置data
上写offset
文件从offset
到offset + strlen(data)
。
答案 0 :(得分:0)
这是一个多部分修复:
Joachim Pilebord是对的。使用fopen(file, "w")
打开文件将破坏文件的内容。因此,每次打开文件时,将文件归零,然后写入新内容。
M Oehm也是正确的,新内容将用零填充 - 因此Sublime将其视为十六进制。
所以,只打开文件一次,在程序开头的某处,只使用
fseek(fp, offset, SEEK_SET);
fwrite(data, 1, strlen(data), fp);
并关闭程序末尾附近的文件会产生正确的输出。使用fputc(' ')
会有效,但您需要确保我不会替换您需要的字符(即先前在文件的那些部分放置数据)。