home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / lang / c / 11522 < prev    next >
Encoding:
Text File  |  1992-07-23  |  4.1 KB  |  144 lines

  1. Newsgroups: comp.lang.c
  2. Path: sparky!uunet!darwin.sura.net!mips!zaphod.mps.ohio-state.edu!caen!news.cs.indiana.edu!nstn.ns.ca!cs.dal.ca!vanadis
  3. From: vanadis@cs.dal.ca (Jose Castejon-Amenedo)
  4. Subject: Strange dicrepancy between  DECstation & Sun 4
  5. Message-ID: <BruoII.21n@cs.dal.ca>
  6. Sender: usenet@cs.dal.ca (USENET News)
  7. Nntp-Posting-Host: cs.dal.ca
  8. Organization: Math, Stats & CS, Dalhousie University, Halifax, NS, Canada
  9. Date: Thu, 23 Jul 1992 16:30:17 GMT
  10. Lines: 132
  11.  
  12.  
  13.     I wrote the program at the end of this message in order to get
  14. a clear picture of what pointers are all about. First I saved it to a
  15. file called points.c, and then I compiled it on a DECstation 5000 with
  16. gcc 1.36 under Ultrix 4.2, and on a Sun 4/490 with gcc 1.37.1 under
  17. SunOS 4.1.2. In both cases I simply did
  18.  
  19.     gcc points.c -o points
  20.  
  21. Now after invoking it with the command line
  22.  
  23.     points Herewith shall we show our third test
  24.  
  25. in the DECstation I get the output
  26.  
  27.     p       p       p
  28.     points  points  points
  29.     H       H       H
  30.     e       e       e
  31.     r       r       r
  32.     ewith   ewith   ewith
  33.     ewith   ewith   ewith
  34.     shall   shall   shall
  35.     t       t       t
  36.     thall   thall   thall
  37.  
  38. as I expected. However, the same command line in the Sun bombs out as
  39. follows:
  40.  
  41.     p       p       p
  42.     points  points  points
  43.     H       H       H
  44.     e       e       e
  45.     r       r       r
  46.     ewith   ewith   ewith
  47.     ewith   ewith   ewith
  48.     shall   shall   shall
  49.     Segmentation fault
  50.  
  51.     Can anybody please explain what's going on? Where is the bug:
  52. in the DECstation or in the Sun? Or is it that I have utterly
  53. misunderstood something?
  54.  
  55.     I'll be thankful for any constructive comments, which I will
  56. summarize in due course.
  57.  
  58. JCA
  59. vanadis@cs.dal.ca
  60.        or
  61. sammy@vana.physto.se
  62.  
  63.  
  64. --------------------------------------------
  65.  
  66. #include <stdio.h>
  67.  
  68.  
  69. main (int argc, char ** argv)
  70. {
  71. /* argv points to an array of strings. */
  72.  
  73.   char * strs[] = { "points", "Herewith", "shall", "we", "show",
  74.                     "our", "third", "test" } ;
  75.  
  76.   char ** crd = strs ;
  77.  
  78.   printf ("%c\t", **argv) ;    /* Pointer unchanged.
  79.                                   Returns 1st character 1st string. */
  80.   printf ("%c\t", **crd) ;
  81.   printf ("%c\n", *strs[0]) ;
  82.  
  83.  
  84.   printf ("%s\t", *argv) ;     /* Pointer unchanged.
  85.                                   Returns 1st string. */
  86.   printf ("%s\t", *crd) ;
  87.   printf ("%s\n", strs[0]) ;
  88.  
  89.  
  90.   printf ("%c\t", **++argv) ;  /* Pointer to 1st character 2nd string.
  91.                                   Returns 1st character 2nd string. */
  92.   printf ("%c\t", **++crd) ;
  93.   printf ("%c\n", *strs[1]) ;
  94.  
  95.  
  96.   printf ("%c\t", *++*argv) ;  /* Pointer to 2nd character 2nd string.
  97.                                   Returns 2nd character 2nd string. */
  98.   printf ("%c\t", *++*crd) ;
  99.   printf ("%c\n", *strs[1]) ;
  100.  
  101.  
  102.   printf ("%c\t", *++*argv) ;  /* Pointer to 3rd character 2nd string.
  103.                                   Returns 3rd character 2nd string. */
  104.   printf ("%c\t", *++*crd) ;
  105.   printf ("%c\n", *strs[1]) ;
  106.  
  107.   printf ("%s\t", ++*argv) ;   /* Pointer to 4th character 2nd string.
  108.                                   Returns substring from 4th character
  109.                                   2nd string to end 2nd string. */
  110.   printf ("%s\t", ++*crd) ;
  111.   printf ("%s\n", strs[1]) ;
  112.  
  113.  
  114.   printf ("%s\t", *argv) ;     /* Pointer unchanged.
  115.                                   Returns substring from 4th character
  116.                                   2nd string to end 2nd string. */
  117.   printf ("%s\t", *crd) ;
  118.   printf ("%s\n", strs[1]) ;
  119.  
  120.  
  121.   printf ("%s\t", *++argv) ;   /* Pointer to 3rd string.
  122.                                   Returns 3rd string. */
  123.   printf ("%s\t", *++crd) ;
  124.   printf ("%s\n", strs[2]) ;
  125.  
  126.  
  127.   printf ("%c\t", ++**argv);   /* Pointer unchanged.
  128.                                   Replaces 1st character 3rd string by
  129.                                   next character in character table,
  130.                                   and then returns that. */
  131.   printf ("%c\t", ++**crd) ;
  132.   printf ("%c\n", *strs[2]) ;
  133.  
  134.  
  135.   printf ("%s\t", *argv) ;     /* Pointer unchanged.
  136.                                   Returns 3rd string with 1st character
  137.                                   replaced by previous step. */
  138.   printf ("%s\t", *crd) ;
  139.   printf ("%s\n", strs[2]) ;
  140.  
  141.   return 0 ;
  142. }
  143.  
  144.