假设我有一个像这样的文件指针:
file_ptr = fopen(“test.txt”, “r+”);
我希望在流过流时更改每个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*/
答案 0 :(得分:6)
是:您可以使用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
可能会使您进入其中一个中间。