Voici une partie de code sur laquelle je suis tombé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?