Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #17545

Re: how to figure out the size of buffer from malloc

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.lang.c
Subject Re: how to figure out the size of buffer from malloc
Date 2012-02-17 15:01 -0800
Organization None to speak of
Message-ID <lnwr7ldpyn.fsf@nuthaus.mib.org> (permalink)
References (2 earlier) <jhk0oi$8cu$1@speranza.aioe.org> <lnipj6fl5m.fsf@nuthaus.mib.org> <jhmaol$qn4$1@speranza.aioe.org> <jhmdjn$7f9$1@dont-email.me> <jhmjds$is4$1@speranza.aioe.org>

Show all headers | View raw


pembed2012 <once@was.enough.invalid> writes:
[...]
> Often this function will be called with a dynamic pointer from malloc. 
> However, it is also possible to call it with a stack array:
>
> char ary[10];
> char* ptr=malloc(10);
> myfunc((void*)ary);  // should work
> myfunc((void*)ptr);  // should also work

Not possible.  It's not just not 100% portable, it's not possible in any
implementation I know of.  You'll need to find a way to keep track of
the size yourself.

> It started off with the buffers being NULL-free strings. However now I 
> need to work with strings with embedded NULL characters.

NULL is (a macro that expands to) a null *pointer* constant.  You're
talking about null *characters*.  I know that some character set
standards use the term "NULL", but you shouldn't use that term to refer
to null characters in the context of C.

A "string" in C is, by definition, "a contiguous sequence of characters
terminated by and including the first null character", so there's no
such thing as a "null-free string".  A character array that doesn't
contain any null characters is not a string; it's simply a character
array.

>                                                          This means I 
> can't find the length of the buffer with strlen.

strlen doesn't give you the size of a buffer; it searches for the
first null character.  You need to decide whether you want the
length of a string contained in a buffer, or the size of the buffer
itself, and you can't reasonably decide that based on its content.
If the buffer holds arbitrary data, it might still contain a null
character that's not meant to be a string terminator; what should
your function return in that case, and how can it decide?

>                                                  And it would be too much 
> change to add a new argument to pass the length of the buffer. So the 
> only good solution is for myfunc to work out by it's self 1) if the 
> buffer is a dynamic pointer or stack array and 2) the size of the buffer.

Then I'm afraid you've got "too much change" ahead of you -- unless
perhaps you can reformulate the problem somehow.  (We don't know *why*
you need this functionality.)

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
    Will write code for food.
"We must do something.  This is something.  Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

how to figure out the size of buffer from malloc pembed2012 <once@was.enough.invalid> - 2012-02-16 20:21 +0000
  Re: how to figure out the size of buffer from malloc James Kuyper <jameskuyper@verizon.net> - 2012-02-16 15:38 -0500
  Re: how to figure out the size of buffer from malloc John Gordon <gordon@panix.com> - 2012-02-16 20:48 +0000
    Re: how to figure out the size of buffer from malloc pembed2012 <once@was.enough.invalid> - 2012-02-16 22:42 +0000
      Re: how to figure out the size of buffer from malloc John Gordon <gordon@panix.com> - 2012-02-16 22:50 +0000
      Re: how to figure out the size of buffer from malloc Keith Thompson <kst-u@mib.org> - 2012-02-16 14:50 -0800
        Re: how to figure out the size of buffer from malloc pembed2012 <once@was.enough.invalid> - 2012-02-17 19:45 +0000
          Re: how to figure out the size of buffer from malloc China Blue Sea <chine.bleu@yahoo.com> - 2012-02-17 11:53 -0800
          Re: how to figure out the size of buffer from malloc Ike Naar <ike@sverige.freeshell.org> - 2012-02-17 20:23 +0000
          Re: how to figure out the size of buffer from malloc James Kuyper <jameskuyper@verizon.net> - 2012-02-17 15:33 -0500
            Re: how to figure out the size of buffer from malloc pembed2012 <once@was.enough.invalid> - 2012-02-17 22:13 +0000
              Re: how to figure out the size of buffer from malloc James Kuyper <jameskuyper@verizon.net> - 2012-02-17 17:25 -0500
              Re: how to figure out the size of buffer from malloc Shao Miller <sha0.miller@gmail.com> - 2012-02-17 17:54 -0500
              Re: how to figure out the size of buffer from malloc Keith Thompson <kst-u@mib.org> - 2012-02-17 15:01 -0800
                Re: how to figure out the size of buffer from malloc Shao Miller <sha0.miller@gmail.com> - 2012-02-17 18:10 -0500
              Re: how to figure out the size of buffer from malloc Ian Pilcher <arequipeno@gmail.com> - 2012-02-17 18:14 -0600
              Re: how to figure out the size of buffer from malloc "BartC" <bc@freeuk.com> - 2012-02-18 11:07 +0000
              Re: how to figure out the size of buffer from malloc ImpalerCore <jadill33@gmail.com> - 2012-02-18 04:40 -0800
              Re: how to figure out the size of buffer from malloc Kaz Kylheku <kaz@kylheku.com> - 2012-02-18 12:48 +0000
          Re: how to figure out the size of buffer from malloc Shao Miller <sha0.miller@gmail.com> - 2012-02-17 17:45 -0500
      Re: how to figure out the size of buffer from malloc Shao Miller <sha0.miller@gmail.com> - 2012-02-16 22:18 -0500
  Re: how to figure out the size of buffer from malloc Devil with the China Blue Dress <chine.bleu@yahoo.com> - 2012-02-16 13:20 -0800
  Re: how to figure out the size of buffer from malloc Lew Pitcher <lpitcher@teksavvy.com> - 2012-02-16 17:07 -0500
  Re: how to figure out the size of buffer from malloc Keith Thompson <kst-u@mib.org> - 2012-02-16 14:28 -0800
  Re: how to figure out the size of buffer from malloc Mark Adler <madler@alumni.caltech.edu> - 2012-02-16 23:49 -0800
  Re: how to figure out the size of buffer from malloc Michael Angelo Ravera <maravera@prodigy.net> - 2012-02-18 09:54 -0800
    Re: how to figure out the size of buffer from malloc gazelle@shell.xmission.com (Kenny McCormack) - 2012-02-18 18:21 +0000
      Re: how to figure out the size of buffer from malloc Shao Miller <sha0.miller@gmail.com> - 2012-02-18 13:56 -0500
      Re: how to figure out the size of buffer from malloc Stephen Sprunk <stephen@sprunk.org> - 2012-02-18 13:42 -0600

csiph-web