我只想替换文件中的特定字符。 例如,我想用字符“ p”替换字符“ l”。 这是正确的方法吗?
int main() {
FILE * ptr;
ptr = fopen("D:\f4.txt", "r+");
if (ptr == NULL) {
printf("file cant be opened");
exit(0);
}
char ch = fgetc(ptr);
while (ch != EOF) {
if (ch == 'l') {
fseek(ptr, -1, 1);
fputc('p', ptr);
}
ch = fgetc(ptr);
}
fclose(ptr);
}
假设我文件中的内容是“大家好”,因此输出应类似于“ heppo every”,但它会连续写入文件“ hepepepepepepepepepepepepepepepepep”中。请帮助我找出原因。
答案 0 :(得分:1)
请注意fopen()
的{{3}}中的内容。
指定“ r +” ,“ w +” 或“ a +” 访问类型后,将同时启用读写功能(据说该文件已打开以进行“更新”)。但是,当您从读取切换为写入时,输入操作必须遇到EOF标记。如果没有EOF,则必须对文件定位功能进行中间调用。文件定位功能是
fsetpos
,fseek
和rewind
。 从书写方式切换为阅读方式时,您必须使用居中调用fflush
或文件定位功能。(斜体)
因此,在将'p'
写入文件后,就好像什么都没发生一样进行读取是不够的,您必须fseek
到由ftell
获得的原始位置,或fflush
文件。
也不要使用幻数:在fseek
中,您应该使用SEEK_CUR
而不是1
。
最后,函数fgetc
返回的是int
类型,而不是char
。这样可以将EOF
与数据字节0xFF
加以区分。