Nan, plantera pô ;-)
ptr[0] est de type char * et la place du pointeur en lui même est bien allouée. Par contre le pointeur ne pointe sur rien puisque j'ai pas refait de malloc derrière.
Donc pour l'instant c'est l'équivalent d'un
char *tmp;
Et je peux le faire pointer sur ce que je veux:
tmp = "prout"
...sachant que prout est une chaine allouée dans une zone de la mémoire en lecture seule à l'initialisation de l'application. Sa place en elle même est déjà allouée et "prout" retourne une adresse vers cette chaîne de caractère (de type const char *).
Voilà donc c'est la même chose pour ptr[0].
Par contre ce que je ne peux pas faire ça:
char *tmp;
strcpy(tmp, "prout");
Car tmp ne pointe sur rien, donc il ne pourra pas recopier "prout", donc crak!
Et donc même chose pour ptr[0].
Pour faire un strcpy effectivement il faudrait faire comme tu as fait: en allouant chaque pointeur de ptr.