1. We have moved from vBulletin to XenForo and you are viewing the site in the middle of the move. Though the functional aspect of everything is working fine, we are still working on other changes including the new design on Xenforo.
    Dismiss Notice

sizeof Function Parameters and sizeof local variables in a function

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

  1. ranjithsutari

    ranjithsutari New Member

    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
    *	Sample Code to demonstrate the size of different variables
    *	By Ranjith Sutari, 2007
    /*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);
    	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
    	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);
    	return 0;
    Thanks in Advance
    Ranjith Sutari
    Last edited by a moderator: Jan 20, 2008
  2. Salem

    Salem New Member

    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.

    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.

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

Share This Page