为什么在C中设置文件位置并写入其中,并填充空字符?

问题描述 投票:0回答:1

我试图在 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+"
模式,但出现了同样的错误。

c file text
1个回答
0
投票

因为您从未将字符串写入文件中偏移量为 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
© www.soinside.com 2019 - 2024. All rights reserved.