gpt4 book ai didi

c - 在c中与fputc斗争

转载 作者:行者123 更新时间:2023-12-04 09:21:32 25 4
gpt4 key购买 nike

在文件 "file1.dat" 中,我写了 "anahasapples"
然后我写了这个程序:

    #include <stdio.h>
#include <conio.h>

int main()
{
FILE *ptr_file;
ptr_file=fopen("file1.dat","r+");
printf("%c",fgetc(ptr_file));
printf("%c",fgetc(ptr_file));
printf("%c\n",fgetc(ptr_file));
char c;
printf("char:\n");
c=getch();
fputc(c,ptr_file);

return 0;
}

我从文件中打印前 3 个字符的部分有效。之后,我想将一个字符放入文件中。
当我编译它时,我没有收到任何错误,但包含的文本没有改变。

最佳答案

Documentation for fopen()标准地显示如下解释:

When a file is opened with update mode (+ as the second or third character in the mode argument), both input and output may be performed on the associated stream. However, output must not be directly followed by input without an intervening call to fflush(3C) or to a file positioning function (fseek(3C), fsetpos(3C) or rewind(3C)), and input must not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters end-of-file.

只需在您的代码中添加一个 fseek() 即可,一切正常:

#include <stdio.h>
#include <conio.h>

int main()
{
FILE *ptr_file;
ptr_file=fopen("file1.dat","r+");
printf("%c",fgetc(ptr_file));
printf("%c",fgetc(ptr_file));
printf("%c\n",fgetc(ptr_file));
char c;
printf("char:\n");
c=getch();
fseek( ptr_file, 0, SEEK_CUR ); /* Add this line */
int err = fputc(c,ptr_file);
printf ("err=%d\n", err);

return 0;
}

这是我输入“x”之前和之后的 file1.dat:

之前

anahasapples

之后

anaxasapples

似乎默认情况下 fputc() 尝试写入文件末尾之后,因此您需要重新定位文件指针(例如,使用 fseek)以使写入发生在当前文件指针的位置。

关于c - 在c中与fputc斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20772918/

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