KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q66922: R6012 Caused by Error in strtok() and strpbrk() Example

Article: Q66922
Product(s): See article
Version(s): 6.00a 6.00 | 6.00a 6.00
Operating System(s): MS-DOS | OS/2
Keyword(s): ENDUSER | docerr | mspl13_c
Last Modified: 23-JAN-1991

The online help example for strtok(), strpbrk(), strcspn(), and
strspn() contains an error in the code. When compiled with pointer
checking turned on in small or medium model and run, the following
error occurs:

   run-time error R6012
   - illegal near-pointer use

The error can be eliminated by changing the pointer incrementing in
the vowel count loop from post-increment to pre-increment. For
example, change.

   /* Count vowels. */
   p = string;
   count = 0;
   do
   {
      p = strpbrk( p, vowels );
      count++;
   } while( *(p++) );

to the following:

   /* Count vowels. */
   p = string;
   count = 0;
   do
   {
      p = strpbrk( p, vowels );
      count++;
   } while( *(++p) );          // <-- Change here...

In this case, the error caught by the pointer checking routine would
not have caused any harm because it would have failed on the last
iteration of the loop.

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.