[英]Unexpected File Pointer Traversal Behaviour in C
這是我的代碼-
#include<stdio.h>
void main()
{
FILE *fp;
fp=fopen("ex.c","w+");
fputs("Hello World\nFile Pointer",fp);
printf("Text - \n");
rewind(fp);
char ch;
while((ch=fgetc(fp))!=EOF)
{
printf("File pointer - %d and letter - ",ftell(fp));
if(ch=='\t')
printf("tab");
else
if(ch=='\n')
printf("newline");
else
putchar(ch);
printf("\n");
}
}
這是我得到的輸出-
Text -
File pointer - 1 and letter - H
File pointer - 2 and letter - e
File pointer - 3 and letter - l
File pointer - 4 and letter - l
File pointer - 5 and letter - o
File pointer - 6 and letter -
File pointer - 7 and letter - W
File pointer - 8 and letter - o
File pointer - 9 and letter - r
File pointer - 10 and letter - l
File pointer - 11 and letter - d
File pointer - 13 and letter - newline
File pointer - 14 and letter - F
File pointer - 15 and letter - i
File pointer - 16 and letter - l
File pointer - 17 and letter - e
File pointer - 18 and letter -
File pointer - 19 and letter - P
File pointer - 20 and letter - o
File pointer - 21 and letter - i
File pointer - 22 and letter - n
File pointer - 23 and letter - t
File pointer - 24 and letter - e
File pointer - 25 and letter - r
但是我期望的是-
Text -
File pointer - 1 and letter - H
File pointer - 2 and letter - e
File pointer - 3 and letter - l
File pointer - 4 and letter - l
File pointer - 5 and letter - o
File pointer - 6 and letter -
File pointer - 7 and letter - W
File pointer - 8 and letter - o
File pointer - 9 and letter - r
File pointer - 10 and letter - l
File pointer - 11 and letter - d
File pointer - 12 and letter - newline
File pointer - 13 and letter - F
File pointer - 14 and letter - i
File pointer - 15 and letter - l
File pointer - 16 and letter - e
File pointer - 17 and letter -
File pointer - 18 and letter - P
File pointer - 19 and letter - o
File pointer - 20 and letter - i
File pointer - 21 and letter - n
File pointer - 22 and letter - t
File pointer - 23 and letter - e
File pointer - 24 and letter - r
它說的一句話-
File pointer - 13 and letter - newline
我沒想到文件指針值會從11跳到13,但希望它從11變成12。
這種行為背后的原因是什么?
但是,當我在代碼中更改此行時fputs("Hello World\\nFile Pointer",fp);
到fputs("Hello World\\tFile Pointer",fp);
我得到了預期的輸出。
為什么會這樣?
您必須在Windows上運行此程序,該Windows使用DOS格式的文本文件。 :在這個格式中,一個換行該文件作為兩個字節中表示Carriage Return
然后Line Feed
。 因此,它必須從文件中讀取2個字節才能讀取單個“換行符”,這反映在ftell()
返回的偏移量中。
如果您運行在Unix上的程序,你會得到您所期望的結果,因為它使用的只是Line Feed
的換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.