在文件流中向后一步 [英] Going backwards by one in file stream

查看:25
本文介绍了在文件流中向后一步的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个文件指针,如下所示:

file_ptr = fopen("test.txt", "r+");

并且我希望在流中移动时更改每个char的ASCII值(我是以密码方式执行此操作的,因此如果有更好或更有效的方法,请让我知道)。

我正在尝试对fgetc()fputc使用while(!feof(file_ptr)) {}循环,但file_ptr将指向下一个字符,因此我想知道是否可以将其指向后一个点。

基本上,我想知道以下项的文件流等效项:

char* blah="blah blah";
char* index=blah;
index++;/*how to navigate a file stream in this way*/

推荐答案

是:可以使用the fseek function

fseek(file_ptr, -1L, SEEK_CUR); // move backwards one character

此外,在fputc之后和fgetc之前,您将想要再次调用fseek

fseek(file_ptr, 0L, SEEK_CUR); // don't move

只是通知系统您正在读写之间切换,以便它知道正确地刷新所有缓冲区等。(否则,您可能不会实际处于您认为的位置。)

顺便说一句,为了正常工作,您需要以二进制模式而不是文本模式打开文件:

file_ptr = fopen("test.txt", "rb+");

因为否则C中的"Character"定义可能与文件中的"Character"定义不完全匹配(尤其是在涉及行结束时),并且fseek可能会使您处于后一种定义的中间。

这篇关于在文件流中向后一步的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆