KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q68423: INFO: The Use of a CTRL+Z Is Limited in Text Files

Article: Q68423
Product(s): Microsoft C Compiler
Version(s): MS-DOS:6.0,6.00a,6.00ax,7.0; OS/2:6.0,6.00a,7.0; WINDOWS:1.0,1.5; WINDOWS NT:1.0,2.0,4.
Operating System(s): 
Keyword(s): kbCRT kbVC100 kbVC150 kbVC200 kbVC400 kbVC500 kbVC600
Last Modified: 22-JUL-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- The C Run-Time (CRT), included with:
   - Microsoft C compiler for MS-DOS, versions 6.0, 6.0a, 6.0ax 
   - Microsoft C compiler for OS/2, versions 6.0, 6.0a 
   - Microsoft C/C++ compiler for MS-DOS, version 7.0 
   - Microsoft C/C++ compiler for OS/2, version 7.0 
   - Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5 
   - Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 4.0, 5.0, 6.0 
-------------------------------------------------------------------------------

SUMMARY
=======

In Microsoft C/C++, the use of a CTRL+Z (hex 1A, decimal 26) is limited in a
file opened in text (translated) mode. If a file contains a CTRL+Z, there can be
only one occurrence of it and it must be the last character in the file.

No other instance of a CTRL+Z is allowed in text mode. By using multiple CTRL+Zs,
or by having characters after the CTRL+Z, you may cause fseek(), or run-time
functions that call fseek(), to behave in an unexpected manner.

MORE INFORMATION
================

By using one of the following, these functions will perform as expected if you
have multiple CTRL+Zs in the file.

- Open the file in binary (untranslated) mode.

  -or-

- Convert your input file to meet the previously mentioned conditions of a text
  file.

When opening a file in binary mode, you must remember that the file is
untranslated. This means that on input, the carriage return-linefeed (CR- LF)
combination is not translated into a single linefeed (LF) character, and on
output, the (LF) character is not translated into a (CR-LF) combination.

This may necessitate modifications to your I/O routines that deal with newlines
(\n) and carriage returns (\r).

Examples of Opening Binary Files
--------------------------------

The following opens a file called FILENAME.DAT for both reading and writing in
binary mode:

  FILE * fileptr;
  fileptr = fopen( "filename.dat", "rb+");

The letter "b" in the access mode designates opening for binary mode.

The following opens a file called FILENAME.DAT for both reading and writing in
binary mode.

  int filehndl;
  filehndl = open( "filename.dat", O_CREAT | O_BINARY | O_RDWR,
                                      S_IWRITE | S_IREAD);

The O_BINARY constant designates the file to be opened in binary mode.

With both of the file-open commands, it should be noted that the text
(translated) mode is the default mode. You may link with an object module called
BINMODE.OBJ to change the default mode to binary. This file is located in your
LIB subdirectory.

This is expected behavior for the Microsoft C/C++ Compiler.

Additional query words:

======================================================================
Keywords          : kbCRT kbVC100 kbVC150 kbVC200 kbVC400 kbVC500 kbVC600 
Technology        : kbVCsearch kbAudDeveloper kbCRT
Version           : MS-DOS:6.0,6.00a,6.00ax,7.0; OS/2:6.0,6.00a,7.0; WINDOWS:1.0,1.5; WINDOWS NT:1.0,2.0,4.0,5.0
Issue type        : kbinfo

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.