假设我有一个这样的文件指针:
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 定义可能与“字符”的文件内部定义不完全匹配(尤其是在涉及行结尾时),并且 fseek
可能会将你在后者的中间。
关于c - 在文件流中后退一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9549652/