Hello!
sizeof (toto) renvoie la taille du pointeur sur char
(4 octets, soit 32 bits, soit 2^32 octets d'adressage)
sizeof(*toto) renvoie la taille d'un caractere (1 octet)
car sizeof ne compte pas les caracteres jusqu'au zéro terminal
et que la taille d'un type de variable n'est pas un nombre d'éléments. char * est un type, pas un espace mémoire.
strlen (toto) renvoie la taille de la chaine de caracteres (pas 20, car il ignore la taille allouée et compte les caractères jusqu'au 0).
Le C est un language système, son compilateur ne rajoute pas de
code pour contôler les espaces mémoire alloués, ce qui empêcherait d'avoir un contrôle total de ce qui est compilé, ralentirait le code et augmenterait sa taille (c'est anti C).
il n'y a rien qui retournera 20
voilà le seul moyen de récupérer la taille allouée :
int i=20;
char *toto;
if ( (toto =(char *) malloc(i))==null) i=0;
//cordialement