Microsoft KB Archive/68337

= INFO: ftell May Return an Invalid Value with a Text File =

Article ID: 68337

Article Last Modified on 12/12/2003

-

APPLIES TO

 The C Run-Time (CRT), when used with:  Microsoft Visual C++ 1.0 Professional Edition

 Microsoft Visual C++ 1.5 Professional Edition

 Microsoft Visual C++ 1.0 Professional Edition

 Microsoft Visual C++ 2.0 Professional Edition</li></ul>

 Microsoft Visual C++ 4.0 Standard Edition</li></ul>

 Microsoft Visual C++ 5.0 Standard Edition</li></ul>

 Microsoft Visual C++ 6.0 Service Pack 5</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q68337

<div class="notice_section">

<div class="summary_section">

SUMMARY
When ftell is used on a file opened in text mode that contains only linefeeds (0x0A) with no carriage returns (0x0D), ftell may return an incorrect value on the first call, causing all subsequent return values to be wrong as well. Opening the file in binary mode eliminates this problem. A text file, by definition, contains CR-LF pairs that are condensed to single LF (linefeed) characters on input. A file that contains LF characters with no CR (carriage return) characters is an ill-formed text file and should be processed in binary mode.

Sample Code
/* Compile options needed: none


 * 1) include <stdio.h>

void main( void) {  FILE *ptr; char a[80]; fpos_t offset; int row; char buffer[42] = &quot;0123456789012345678901234567890123456789\n&quot;; /* |   10   |    10   |    10   |   10   | */

/* Create a file called TESTFILE.TXT that contains 12 lines of     40 chars each with linefeeds only. */   ptr = fopen( &quot;TESTFILE.TXT&quot;, &quot;wb&quot; );

for( row = 0; row < 12; row++ ) fprintf( ptr, buffer );

fclose( ptr );

/* Open the file in text mode. */   ptr = fopen( &quot;TESTFILE.TXT&quot;, &quot;r&quot; );

/* Positions (or should position) the file pointer at an offset. of 41 */ fgets( a, 79, ptr );

offset = ftell( ptr ); printf( &quot;offset = %ld\n&quot;, offset );  /* Prints out 30. */   fclose( ptr ); }

Keywords: kbinfo kbcrt kbcode KB68337

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.