home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / qc_prog / chap08 / reverse2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-04-05  |  1.2 KB  |  54 lines

  1. /* reverse2.c -- demonstrates a pointer to a pointer  */
  2.  
  3. #include <stdio.h>         /* for NULL   */
  4. #include <malloc.h>        /* for size_t */
  5.  
  6. #define MAXL 20
  7.  
  8. main()
  9. {
  10.     char *cptrs[MAXL];
  11.     char **pp;             /* pointer to pointer */
  12.     char *cp;
  13.     int count, i, ch;
  14.     extern char *Getbyte();
  15.  
  16.     printf("Type in several lines of text, and I will\n");
  17.     printf("print them back out in reverse order.\n");
  18.     printf("(Any blank line ends input):\n");
  19.  
  20.     for (i = 0; i < MAXL; ++i)
  21.         {
  22.         cp = Getbyte();
  23.         cptrs[i] = cp;     /* assign address to pointer */
  24.         count = 0;
  25.         while ((ch = getchar()) != '\n') /* gather line */
  26.             {
  27.             *cp = ch;
  28.             cp = Getbyte();
  29.             ++count;
  30.             }
  31.         *cp = '\0';
  32.         if (count == 0)    /* all done if blank line */
  33.             break;
  34.         }
  35.     printf("---------<reversed>---------\n");
  36.     pp = &cptrs[i];
  37.     while (pp >= cptrs)
  38.         {
  39.         printf("%s\n", *(pp--));
  40.         }
  41. }
  42.  
  43. char *Getbyte(void)
  44. {
  45.     char *cp;
  46.  
  47.     if ((cp = sbrk(1)) == (char *)-1)
  48.         {
  49.         printf("Panic: sbrk failed\n");
  50.         exit(1);
  51.         }
  52.     return (cp);
  53. }
  54.