Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between sizeof(char) and sizeof(char *)

Tags:

c

malloc

sizeof

I'm wondering if there is a difference between sizeof(char) and sizeof(char *) :

char *s;
s = malloc(sizeof(char*)*len + 1);

char *s;
s = malloc(sizeof(char)*len + 1);

Is this the same ?

like image 633
Flaz Avatar asked Dec 02 '22 12:12

Flaz


1 Answers

char is a character and sizeof(char) is defined to be 1. (N1570 6.5.3.4 The sizeof and _Alignof operators, paragraph 4)

char* is a pointer to a character and sizeof(char*) depends on the environment. It is typically 4 in 32-bit environment and 8 in 64-bit environment.

In typical environment where sizeof(char*) > sizeof(char), malloc(sizeof(char*)*len + 1) will (at least try to) allocate more memory than malloc(sizeof(char)*len + 1) if len is small enough not to cause integer overflow.

like image 195
MikeCAT Avatar answered Dec 04 '22 22:12

MikeCAT