1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

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