在文件流中向后退一个

spa*_*ara 2 c encryption pointers filestream

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

file_ptr = fopen(“test.txt”, “r+”);
Run Code Online (Sandbox Code Playgroud)

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

我试图用一个while(!feof(file_ptr)) {}环带fgetc()fputc,但file_ptr将指向下一个字符,所以我想知道如果有什么我可以做一点上向后一斑.

基本上,我想知道相当于的文件流:

char* blah="blah blah";
char* index=blah;
index++;/*how to navigate a file stream in this way*/
Run Code Online (Sandbox Code Playgroud)

rua*_*akh 6

是的:你可以使用这个fseek功能:

fseek(file_ptr, -1L, SEEK_CUR); // move backwards one character
Run Code Online (Sandbox Code Playgroud)

此外,在您fputc和您之前fgetc,您将fseek再次打电话:

fseek(file_ptr, 0L, SEEK_CUR); // don't move
Run Code Online (Sandbox Code Playgroud)

只是为了通知系统你在读写之间切换,以便它知道正确刷新所有缓冲区等等.(否则你可能实际上并不在你想的地方.)

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

file_ptr = fopen("test.txt", "rb+");
Run Code Online (Sandbox Code Playgroud)

因为否则"字符"的内部C定义可能与"字符"的内部文件定义不完全匹配(特别是当涉及行结尾时),并且fseek可能使您处于后者之一的中间.