sizeof Function Parameters and sizeof local variables in a function

Discussion in 'C' started by ranjithsutari, Jan 20, 2008.

  1. ranjithsutari

    ranjithsutari New Member

    Joined:
    Jan 20, 2008
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    In this program function parameter is an array of characters(string). In this code the size of function parameter is 20 bytes and the size of local variables in function is only 4 bytes.
    Please explain why this happens
    why the size of local variable is only 4 bytes why not less or more
    why buffer overflow does not happens
    Code:
    /*
    *	Sample Code to demonstrate the size of different variables
    *
    *	By Ranjith Sutari, 2007
    */
    #include<stdio.h>
    
    /*Function to Read the String 
    * the size of the local variable in this function is only 4 bytes
    */
    int read_string(char prompt[], char answer[], int max)
    {
    
    	fputs(prompt, stdout);
    	fflush(stdin);
    	fgets(answer, max, stdin);
    	printf("size of the local variable answer in function read_string is %d\n", sizeof answer);
    	return 0;
    
    }
    
    /* Function to print the string
    *	the size of the local variable in this function is 4 bytes only
    */
    
    int print_string(char prompt[], char answer[])
    {
    	fputs(prompt, stdout);
    	printf("%s", answer);
    	printf("Size of the local variable answer in function print_string is %d", sizeof answer);
    	return 0;
    }
    
    int main()
    {
    	char STRING[20];
    
    	/*size of the STRING is 20 bytes
    	*/
    	printf("Size of The variable string in function main at beginning is %d\n\n", sizeof string);
    	
    	read_string("What is your Name : ", STRING, sizeof STRING); /* STRING IS PASSED AS FUNCTION
    																PARAMETER*/
    	print_string("Your name is ", string);						
    	
    	/* size of the string is 20 bytes*/
    	printf("\n\nSize of The variable string in function main at end is %d\n", sizeof string);
    	fflush(stdin);
    	getchar();
    
    	return 0;
    }
    Thanks in Advance
    Ranjith Sutari
     
    Last edited by a moderator: Jan 20, 2008
  2. Salem

    Salem New Member

    Joined:
    Nov 15, 2007
    Messages:
    133
    Likes Received:
    5
    Trophy Points:
    0
    Occupation:
    Please don't PM me for 1:1 support.
    First off, fflush(stdin) is undefined. Flushing a stream is only valid for output streams, or update streams when the last operation was a write.
    http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1052863818&id=1043284351

    As for your main question, the sizeof is applied to the parameter value (in this case, a pointer). The sizeof operator can't work out how much data a pointer points to (see example). Using [ ] instead of pointer notation in your function declaration doesn't change anything.

    Eg.
    Code:
    void foo ( const char *a ) {
      printf("%lu\n", sizeof(a) );
    }
    int main ( ) {
      char a[] = "hello";
      char b[] = "this is a longer string";
      foo(a);
      foo(b);
      return 0;
    }
    
    Also see http://c-faq.com/aryptr/aryparmsize.html
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice