Thread: strange scanf behaviour

  1. #1
    Registered User
    Join Date
    Aug 2009

    strange scanf behaviour

    Hi all,

    after alot of java i've decided to start learning some C, i've an exercise that i cannot complete because i've a strange (to me) behaviour, here's the code

    #include <stdio.h>
    #include <stdlib.h>
    int main() 
    	char *strings [10]; 
    	int i, n = 4, str_size = 255;
    	printf ("Enter %d strings to sort:\n", n); 
    	for (i=0; i<n; i++) {
    		strings[i] = (char *) malloc (str_size);
    		scanf ("%s", &strings[i]); 
    	printf("\nRESULT:\n", &strings[i]); 
    	for (i=0; i<n; i++) {
    		printf("%s \n", &strings[i]); 
    and here is the terminal output

    Enter 4 strings to sort:
    one two three four 
    What happen to the "three" number? in general all string with a length greater then 3 are concatenated with the following string ...

    i've re-read the scanf documentation but really can't find where's the mistake

  2. #2
    DESTINY BEN10's Avatar
    Join Date
    Jul 2008
    in front of my computer
    You dont need & while using %s with scanf and printf. %s takes pointer as its argument. Also no need to cast malloc, it returns void*. Also look at this.
    printf("\nRESULT:\n", &strings[i]);
    Last edited by BEN10; 08-10-2009 at 06:27 AM.

    By associating with wise people you will become wise yourself
    It's fine to celebrate success but it is more important to heed the lessons of failure
    We've got to put a lot of money into changing behavior

    PC specifications- 512MB RAM, Windows XP sp3, 2.79 GHz pentium D.
    IDE- Microsoft Visual Studio 2008 Express Edition

  3. #3
    The larch
    Join Date
    May 2006
    I suppose you shouldn't take an address of the char* that strings[i] is.

    scanf ("%s", strings[i]);
    printf("%s \n", strings[i]);
    If you happen to use GCC, then turning on warnings can help with errors in format string.

    a.c:13: warning: char format, pointer arg (arg 2)
    a.c:16: warning: too many arguments for format
    a.c:18: warning: char format, pointer arg (arg 2)
    a.c:21: warning: control reaches end of non-void function
    (Actually the warning seems to be incorrectly worded: what you have is char* format and char** argument? Anyway, this shows there is something wrong and it is unlikely to work.)
    I might be wrong.

    Thank you, anon. You sure know how to recognize different types of trees from quite a long way away.
    Quoted more than 1000 times (I hope).

  4. #4
    Registered User
    Join Date
    Aug 2009
    thanks BEN10 and anon, the error was the use of the "&" operator...

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Strange behaviour of GCC
    By BlackOps in forum C Programming
    Replies: 14
    Last Post: 07-29-2009, 06:44 PM
  2. Strange behaviour of scanf()
    By chris1985 in forum C Programming
    Replies: 3
    Last Post: 01-15-2005, 02:41 PM
  3. strange program behaviour...
    By now5 in forum C Programming
    Replies: 10
    Last Post: 03-08-2004, 05:39 AM
  4. GetClientRect strange behaviour
    By btq in forum Windows Programming
    Replies: 2
    Last Post: 10-02-2002, 02:13 PM
  5. Strange behaviour
    By PrivatePanic in forum Windows Programming
    Replies: 11
    Last Post: 07-23-2002, 12:54 AM