Besoin d'une petite précision sur un malloc
Voici une partie de code sur laquelle je suis tombé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
char * retour_getenv;
char * opt_adr = NULL;
static char * adresse_serveur = ADR_SRV_DEFAUT;
....
retour_getenv = getenv("OPT_ADR");
if ((retour_getenv != NULL) && (strlen(retour_getenv) != 0) {
opt_adr = malloc(strlen(retour_getenv + 1);
if (opt_adr != NULL) {
strcpy(opt_adr, retour_getenv);
adresse_serveur = opt_adr;
}
else {
perror("malloc");
exit(EXIT_FAILURE);
}
} |
Ma question : Pourquoi à la place de ça :
Code:
1 2 3 4 5
| opt_adr = malloc(strlen(retour_getenv + 1);
if (opt_adr != NULL) {
strcpy(opt_adr, retour_getenv);
adresse_serveur = opt_adr;
} |
on fait pas ça :
Code:
1 2
| strcpy(opt_adr, retour_getenv);
adresse_serveur = opt_adr; |
Du coup je me suis posé une seconde question, soit un autre exemple :
Code:
1 2
| char * chaine = "exemple\0";
chaine = "nouvel exemple\0"; |
>>> c'est dangeureux de faire ça? En fait puisqu'on alloue pas de place spécifique pour la chaine ça risque pas d'écrire sur autre chose ?