gpt4 book ai didi

c - 我在此程序中得到意外的输出

转载 作者:行者123 更新时间:2023-11-30 14:37:43 25 4
gpt4 key购买 nike

我只想替换文件中的特定字符。例如,我想用字符“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”,但它继续写入文件“hepepepepepepepepepepepepepepepep”。请帮我找出为什么会发生这种情况。

最佳答案

请注意 man page 中的这一点对于fopen()

When the "r+", "w+", or "a+" access type is specified, both reading and writing are enabled (the file is said to be open for "update"). However, when you switch from reading to writing, the input operation must encounter an EOF marker. If there is no EOF, you must use an intervening call to a file positioning function. The file positioning functions are fsetpos, fseek, and rewind. When you switch from writing to reading, you must use an intervening call to either fflush or to a file positioning function. (my italics)

所以当你将'p'写入文件后,仅仅像什么都没发生一样继续读取是不够的,你必须fseek到原来的位置,通过 ftellfflush 文件获取。

也不要使用魔数(Magic Number):在 fseek 中,您应该使用 SEEK_CUR 而不是 1

最后,函数fgetc返回一个int类型,而不是char。这使得 EOF 能够与数据字节 0xFF 区分开来。

关于c - 我在此程序中得到意外的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com