Hi

On Sat, Oct 28, 2023 at 07:57:54PM +1300, rhys wrote:
> char myBuf[] = { '\x01', '\x04', '\x31', '\x00', '\x00', '\x1D', '\x7E', 
> '\xF7' };
>     printf ("sizeof (myBuf) = %d\n", sizeof (myBuf));

This is an array, so sizeof() shows the length of that array.  Making it
longer would have showed you your mistake directly.

> void process_buffer (char *bufPtr) {
>     printf ("sizeof (bufPtr) = %d\n", sizeof (bufPtr));

This is a pointer.  A pointer points to somethine else.  The size of a
pointer is unrelated to your array.

> produces following output:
> sizeof (myBuf) = 8
> sizeof (bufPtr) = 4

You run on a 32 bit system, so pointers are 4*sizeof(char), aka 4 byte.

> expected output (confirmed on Oracle Linux 8.4):
> sizeof (myBuf) = 8
> sizeof (bufPtr) = 8

Oracle Linux 8 does not support 32 bit systems, so you run on a 64 bit
system.  Pointers are 8*sizeof(char), aka 8 bytes.

Arrays and pointers in C are sometimes interchangeable, but with great
precision you found one of the exceptions.

Bastian

-- 
You!  What PLANET is this!
                -- McCoy, "The City on the Edge of Forever", stardate 3134.0

Reply via email to