我试图在 C 中的文本文件中的任意位置写入。
#include <stdlib>
void write_in_file(FILE *file, char *str, fpos_t *pos){
fsetpos(file, pos);
for(int i=0; str[i] != '\0'; ++i){
fputc(str[i],file);
}
}
int main(){
char *str = "Hola123 Mundo\n";
FILE *file = fopen("database/file_1.txt", "w");
fpos_t pos = 1;
write_in_file(file, str, &pos);
fclose(file);
return 0;
}
并且该文本文件中包含以前的信息。我先用
"Hola123 Mundo\n"
写pos = 0
,然后用pos = 1
重写。我预计输出文件是
HHola123 Mundo
但是有
'\0'Hola123 Mundo
我知道第一个字节是空字符,因为在十六进制编辑器中二进制是
00
。
我的直觉是,当使用
"w"
模式打开时,重写整个文件,因此跳过第一个位置会导致跳过 00
字节。然后我尝试了"w+"
模式,但出现了同样的错误。
因为您从未将字符串写入文件中偏移量为 0 的位置,所以使用
"w"
模式打开文件会将文件截断为 0 长度,从而删除已存在的所有数据。
如果你这样做:
write_in_file(file, str, &(fpos_t){0});
write_in_file(file, str, &(fpos_t){1});
或者(假设您的文件已经以
'H'
开头):
FILE *file = fopen("database/file_1.txt", "r+");
代替:
fpos_t pos = 1;
write_in_file(file, str, &pos);
并且:
FILE *file = fopen("database/file_1.txt", "w");
那么您的文件将包含:
HHola123 Mundo