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)
是的:你可以使用这个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可能使您处于后者之一的中间.