在文件"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;
    }


我从文件中打印前三个字符的部分起作用。之后,我想在文件中放入一个字符。编译时,没有任何错误,但是包含的文本没有改变。

最佳答案

Documentation for fopen()通常显示以下解释:


以更新模式打开文件时(第二或第三为+
模式参数中的字符),输入和输出都可能是
在关联的流上执行。但是,输出不得
直接输入后,无需中间调用fflush(3C)
或文件定位功能(fseek(3C),fsetpos(3C)或
rewind(3C)),并且在没有
对文件定位功能的干预,除非
输入操作遇到文件结尾。


只需将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:

之前


凤梨





菠萝蜜


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

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

10-09 18:20