Microsoft KB Archive/35037

From BetaArchive Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Knowledge Base


INFO: How C Interprets Integer Constants with Leading Zeroes

Article ID: 35037

Article Last Modified on 12/11/2003



APPLIES TO

  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 1.52 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++ 6.0 Standard Edition



This article was previously published under Q35037

SUMMARY

Two similar assignment statements produce very different results when the application prints values assigned. For example:

   a = 20;
   printf("%d", a);   /* this prints "20" */ 
   a = 020;
   printf("%d", a);   /* but this prints "16" */ 
                

Any number with a leading "0" (zero) is interpreted to be an octal number (base 8). Remove the leading zero from the decimal number.

MORE INFORMATION

All character constants of the form "\<o>", "\<o><o>", "\<o><o><o>", (where <o> is a digit) and their string equivalents are specified in octal as well. For example, \33 and \033 each specify the ESC character (decimal 27, hexadecimal 1B). To specify a character constant in hexadecimal, use "\x<h><h>", where <h> is a hexadecimal digit. C does not provide a method to specify a decimal number in a character constant; you can use a decimal integer constant instead (for example, ch = 27).

Keywords: kbinfo kblangc KB35037