home *** CD-ROM | disk | FTP | other *** search
/ Super PC 34 / Super PC 34 (Shareware).iso / spc / UTIL / DJGPP2 / V2 / DJTST200.ZIP / tests / libc / ansi / stdio / sscanf.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-25  |  1.8 KB  |  90 lines

  1. #include <stdio.h>
  2.  
  3. int
  4. main(void)
  5. {
  6.    char name[256];
  7.    int ch_read, q;
  8.  
  9.    ch_read = -12345;
  10.  
  11.    printf("sscanf=%d\n", sscanf("abc123", "%255[a-zA-Z0-9]%n", name, &ch_read));
  12.    printf("ch_read=%d\n",ch_read);
  13.    printf("name=%s\n",name);
  14.  
  15.    if (ch_read != 6) {
  16.       printf("Test failed!\n");
  17.       return 1;
  18.     }
  19.  
  20.    ch_read = -12345;
  21.  
  22.    printf("sscanf=%d\n", sscanf("abc123 ", "%255[a-zA-Z0-9]%n", name, &ch_read));
  23.    printf("ch_read=%d\n",ch_read);
  24.    printf("name=%s\n",name);
  25.  
  26.    if (ch_read != 6) {
  27.       printf("Test failed!\n");
  28.       return 1;
  29.     }
  30.  
  31.    ch_read = -12345;
  32.  
  33.    printf("sscanf=%d\n", sscanf("abc123 ", "%c%n", name, &ch_read));
  34.    printf("ch_read=%d\n",ch_read);
  35.    printf("name=%s\n",name);
  36.  
  37.    if (ch_read != 1) {
  38.       printf("Test failed!\n");
  39.       return 1;
  40.     }
  41.  
  42.    ch_read = -12345;
  43.  
  44.    printf("sscanf=%d\n", sscanf("abc123 ", "%s%n", name, &ch_read));
  45.    printf("ch_read=%d\n",ch_read);
  46.    printf("name=%s\n",name);
  47.  
  48.    if (ch_read != 6) {
  49.       printf("Test failed!\n");
  50.       return 1;
  51.     }
  52.  
  53.    ch_read = -12345;
  54.  
  55.    printf("sscanf=%d\n", sscanf("123abc", "%d%s%n", &q, name, &ch_read));
  56.    printf("ch_read=%d\n",ch_read);
  57.    printf("name=%s\n",name);
  58.  
  59.    if (ch_read != 6) {
  60.       printf("Test failed!\n");
  61.       return 1;
  62.     }
  63.  
  64.    return 0;
  65. }
  66.  
  67.  
  68. /*
  69. ---8<---
  70.  
  71. It outputs:
  72. ---8<---
  73. sscanf=1
  74. ch_read=-1058078715
  75. name=abc123
  76. ---8<---
  77.  
  78. That is ch_read is uninitialized and sscanf succseeded! :-(
  79.  
  80. I think it is because a bug in doscan.c. It checks 'fileended' variable
  81. and immediately exits. But in the format string next token is '%n' which does
  82. not require more input.
  83.  
  84. This test works correctly on Solaris2.4.
  85. ---
  86. Alexander Lukyanov
  87. lav@video.yars.free.net
  88.  
  89. */
  90.