Beginner pointers/arrays question

This is a discussion on Beginner pointers/arrays question within the C Programming forums, part of the General Programming Boards category; Hi all - apologies if this is a tired old question. I couldn't find anything on first glance in the ...

  1. #1
    Registered User
    Join Date
    Jul 2010
    Posts
    2

    Beginner pointers/arrays question

    Hi all - apologies if this is a tired old question. I couldn't find anything on first glance in the forums or tutorials.
    I'm new to C, and I'm trying to find out from inside a function how many characters have been allocated in memory to a string array. The catch is that the function only has a pointer to the array that it takes as an argument. I've tried something like this:

    Code:
    #include <stdlib.h>
    
    int get_free_chars(char *ptr)
    {
        return sizeof(ptr)/sizeof(char);
    }
    
    main()
    {
        char foo[50] = "";
        int a = sizeof(foo) / sizeof(char);
        int b = get_free_chars(foo);
    }
    (Obviously there would be no point in the get_free_chars function alone - I'm trying to do something similar within a string manipulation function I'm coding)

    'a' takes the value I'd expect - 50 - but 'b' comes out to be 4 (obviously because the program is measuring the size of the pointer (4 bytes = 32 bits, which is the size for my system) rather than the array itself). Doing sizeof(*ptr) obviously wouldn't work as that would point directly to the first character only.

    Is there a nice way to get this information from within the function?

    Thanks in advance!
    Last edited by whiteandnerdy; 07-14-2010 at 01:22 PM.

  2. #2
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    21,451
    Quote Originally Posted by whiteandnerdy
    I'm trying to find out from inside a function how many characters have been allocated in memory to a string array. The catch is that the function only has a pointer to the array that it takes as an argument.
    (...)
    Is there a nice way to get this information from within the function?
    No, at least not one that is portable. Just provide another parameter for the size.
    C + C++ Compiler: MinGW port of GCC
    Version Control System: Bazaar

    Look up a C++ Reference and learn How To Ask Questions The Smart Way

  3. #3
    Registered User
    Join Date
    Jul 2010
    Posts
    2
    Fair enough. Thanks for the quick reply

  4. #4
    Registered User C_ntua's Avatar
    Join Date
    Jun 2008
    Posts
    1,853
    Typically you can make a struct like
    Code:
    struct String
    {
        char* data;
        unsigned size;
    }
    and any functions you like to help you.

    Alternatively, you use a terminating character like '\0' c-strings use. So you would have
    Code:
    int get_free_chars(char *ptr)
    {
        while(*ptr != '\0')
           ptr++;
    }
    which does what strlen() does in this matter for a c-string. But I guess you want the first option which is faster in terms of performance

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Beginner: Linked List question
    By WeatherMan in forum C++ Programming
    Replies: 2
    Last Post: 04-03-2008, 07:16 AM
  2. Quick IF statement question (beginner)
    By jim.rattlehead in forum C Programming
    Replies: 23
    Last Post: 11-29-2007, 05:51 AM
  3. beginner question
    By Barrot in forum C++ Programming
    Replies: 4
    Last Post: 08-19-2005, 02:17 PM
  4. Question About External Files (Beginner)
    By jamez05 in forum C Programming
    Replies: 0
    Last Post: 08-11-2005, 07:05 AM
  5. Beginner on Win32 apps, lame question.
    By Templario in forum C Programming
    Replies: 3
    Last Post: 11-06-2002, 07:39 PM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21