c - 在文件流中后退一位

标签 c pointers filestream encryption

假设我有一个这样的文件指针:

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

并且我想在流中移动时更改每个 char 的 ASCII 值(我这样做是作为密码,所以如果有更好或更有效的方法来做到这一点,请告诉我)。

我正在尝试使用带有 fgetc()fputcwhile(!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 定义可能与“字符”的文件内部定义不完全匹配(尤其是在涉及行结尾时),并且 fseek 可能会将你在后者的中间。

关于c - 在文件流中后退一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9549652/

相关文章:

c++ - 为什么指针在 C++ 中表现得像这样

c++ - 反转链表 - C++

c# - 某些文件被 SQL Server FileStream 损坏

c 用作矩阵索引的指针

c# - ExcelReader Factory 在最后写入行失败

c - 如何在c中读取给定文件的一部分

编译器错误: undefined reference to `print'

c - 从线程更新全局变量

c - 使用位算术从二进制 int 获取绝对值

c++ - 编译器会偷偷增加结构的对齐吗?