aru*_*run 4 c pointers file fseek
我需要在现有文件中的第 45 个字节之前添加一个字符串.我尝试使用fseek如下所示.
int main()
{
FILE *fp;
char str[] = "test";
fp = fopen(FILEPATH,"a");
fseek(fp,-45, SEEK_END);
fprintf(fp,"%s",str);
fclose(fp);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
我期望这段代码会在EOF的第 45 个字符之前添加"test" ,相反,它只是将"test"附加到EOF.
请帮我找到解决方案.
这是我之前的问题的延续,
将项目附加到c中最后一行之前的文件中
blu*_*oon 11
使用模式r +(如果已存在)或+(如果它不存在并且您想要创建它)打开它.由于你在文件结束之前寻找45个字节,我假设它已经存在.
fp = fopen(FILEPATH,"r+");
Run Code Online (Sandbox Code Playgroud)
你的其余代码很好.另请注意,这不会插入文本,但会覆盖文件中当前位置的任何内容.
即,如果您的文件看起来像这样:
xxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)
然后运行此代码后,它将如下所示:
xxxxxxxtestxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)
如果你真的想插入而不是覆盖,那么你需要将SEEK_END-45到EOF的所有文本读入内存,写入测试然后再写回来