假设我有一个像这样的文件指针:
file_ptr = fopen(“test.txt”, “r+”);
我想改变每一个char
当我在流中移动时的 ASCII 值(我将其作为密码执行,因此如果有更好或更有效的方法来执行此操作,请告诉我)。
我正在尝试使用while(!feof(file_ptr)) {}
循环与fgetc()
and fputc
,但是file_ptr
将指向下一个字符,所以我想知道是否有什么我可以做的,将其向后指向一个位置。
本质上,我想知道相当于以下内容的文件流:
char* blah="blah blah";
char* index=blah;
index++;/*how to navigate a file stream in this way*/
是的:您可以使用the fseek功能 http://pubs.opengroup.org/onlinepubs/009604599/functions/fseek.html:
fseek(file_ptr, -1L, SEEK_CUR); // move backwards one character
此外,在您fputc
在你之前fgetc
,你会想打电话fseek
again:
fseek(file_ptr, 0L, SEEK_CUR); // don't move
只是通知系统您正在读取和写入之间切换,以便它知道正确刷新所有缓冲区等。 (否则你可能实际上并不在你想象的地方。)
顺便说一句,为了使其正常工作,您需要以二进制模式而不是文本模式打开文件:
file_ptr = fopen("test.txt", "rb+");
因为否则“字符”的 C 内定义可能与“字符”的文件内定义不完全匹配(特别是当涉及到行结尾时),并且fseek
可能会让你陷入后者之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)