Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用偏移量写入文件_C_File Io - Fatal编程技术网

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对您更有用?如果您正在创建格式化的文本文件,这将有助于防止文件中出现不可打印的字符。