如何读取被查找的文件?

How to read a file that was fseeked?

我不知道为什么这不起作用:

#include <stdio.h>

int main(){
    FILE* fp = fopen("txt2","wr");
    if(!fp) return 1;

    fprintf(fp,"20");
    fseek(fp,0,SEEK_SET);   
    fprintf(fp,"19");
    rewind(fp);
    
    char c;
    while((c=fgetc(fp))!=EOF)
        printf("%c",c);
}

这里应该写20,然后改写成19,将位置设置为文件的开头,然后读取字符直到EOF(所以应该打印19)。但什么也不打印。这是为什么?

我试图更好地检查 return 指针到 fp(因为 wr):

编辑:

#include <stdio.h>
int main(){
    FILE *fp = fopen("txt","wr");
    if(!fp){
        printf("nada\n");
        return 1;
    }
}

但是编译没有问题。这是为什么? wr 应该是 UB(从而导致段错误或其他错误)或?

模式 "wr" 不是 POSIX fopen() or Microsoft fopen() 的有效字符串。您可能想使用 "w+"。使用 "r+" 是一种替代方法,但文件必须存在才能打开它。

您正在使用的 fopen() 的实现可能将 "wr" 视为等同于 "w"(除非它报告错误并且您的程序退出 - 这是一个好主意报告你退出的原因)。您无法从只写文件流中读取。

严格来说,您还应该对变量 c 使用 int 而不是 char,因为 fgetc() returns an int.