Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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_Fopen_Fwrite_Fseek - Fatal编程技术网

在C中覆盖文件的内容

在C中覆盖文件的内容,c,fopen,fwrite,fseek,C,Fopen,Fwrite,Fseek,我试图在C中使用fwrite、fseek覆盖文件的内容,但不起作用 文件大小为30。我想通过覆盖文件中的位置10~13来写入ABCD。所以我在下面编了一个程序 FILE *fp = fopen("file.txt", "a+"); fseek(fp, 10, SEEK_SET); fwrite("ABCD", 1, 4, fp); 但ABCD写在文件中的位置30之后。我找到了一些建议,可以使用二进制模式,比如ab+,但是“b” 我该怎么做 使用r+模式打开文件,而不是a+模式。二进制文件的b

我试图在C中使用fwrite、fseek覆盖文件的内容,但不起作用

文件大小为30。我想通过覆盖文件中的位置10~13来写入ABCD。所以我在下面编了一个程序

FILE *fp = fopen("file.txt", "a+");
fseek(fp, 10, SEEK_SET); 
fwrite("ABCD", 1, 4, fp);
但ABCD写在文件中的位置30之后。我找到了一些建议,可以使用二进制模式,比如ab+,但是“b”

我该怎么做

使用r+模式打开文件,而不是a+模式。二进制文件的b是可选的,在POSIX系统上基本不相关:-

#include <stdlib.h>
#include <stdio.h>

int main(void){
    FILE *fp = fopen("file.txt", "r+");
    fseek(fp, 10, SEEK_SET);
    fwrite("ABCD", 1, 4, fp);
    fclose(fp);

    return 0;
}

为什么要打开要追加的文件?模式a+打开以进行读取和追加。使用r+模式。哦,使用r+时效果很好。非常感谢。对于在文本模式下打开的流,fseek的用途有限,因为回车符–换行符转换可能会导致fseek产生意外结果。在追加模式下,所有写入操作都发生在文件末尾;无法使用file*函数定位文件并在给定位置写入;如果您进入文件描述符并使用,则规则会略有不同。