Newsgroups: comp.lang.c Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!cunixf.cc.columbia.edu!cubmol!ping From: ping@cubmol.bio.columbia.edu (Shiping Zhang) Subject: Re: Strange Behavior? Message-ID: <1991May8.204009.1694@cubmol.bio.columbia.edu> Reply-To: ping@cubmol.bio.columbia.edu (Shiping Zhang) Organization: Dept. of Biology, Columbia Univ., New York, NY References: <1991May8.020720.20170@mccc.edu> Date: Wed, 8 May 91 20:40:09 GMT In article <1991May8.020720.20170@mccc.edu> pjh@mccc.edu (Peter J. Holsberg) writes: >Here is an extract from a program a student wrote. Note that he has >declared "input" incorrectly. The strange behavior is that, when choice >"1" is made, the print function outputs all but the first line that was >entered. Can anyone explain that in terms of what scanf() is doing to >memory near "input"? (This is on a 386, if endianism matters.) [...] > char sentence [MAX][SIZE]; /* an array of strings */ > char *point[MAX]; /* an array of pointers to char */ > char *orginal[MAX]; /* an array holding the orginal sequence */ > char input; /* SHOULD HAVE BEEN int input!!! */ [...] > printf("Make a choice: "); > scanf ("%d" , &input); /* value converted to decimal integer I think it results from declaring input as char and using it as int in scanf(). When scanf() writes 1 into the location of input, it puts into 0's those bits that belong to the first byte(s) of sentence[0], terminating sentence[0] at its first byte. I could be wrong, though. -ping