4

我有一个名为 myfile.txt 的文本文件,内容如下:

line 1
l

我的代码:

#include<stdio.h>
int main(){
    FILE *f = fopen("myfile.txt","r");
    if(f==NULL){
        FILE *fp=fopen("myfile.txt","w");
        fclose(fp);
        f = fopen("myfile.txt","r");
    }
    while(!feof(f)){
        printf("\ncharacter number %d    ",ftell(f));
        putchar(fgetc(f));      
    }
    fclose(f);
    return 0;
}

输出是:

character number 0    l
character number 1    i
character number 2    n
character number 3    e
character number 4
character number 5    1
character number 6

character number 8    l
character number 9      

每当遇到 \n 时,ftell 都会跳过一个值,例如它跳过了值 7。为什么会这样?请详细解释一下,我想知道。

4

1 回答 1

1

问题在于换行符,在 Windows 中是\r\nWindows 回车符 \r\n 是由两个字符还是一个字符组成?)。

尝试更改这些:

fopen("myfile.txt","r");

对这些:

fopen("myfile.txt","rb");

哪里b是二进制模式。

二进制模式在 Windows 上有所不同,其中文本模式将两个字符回车、换行序列映射到单个换行符。注意:Linux 上不需要映射。

于 2017-09-20T05:59:38.463 回答