Remplacer un char dans une chaine de caractère [C] - C - Programmation
Marsh Posté le 28-03-2013 à 17:38:31
Code :
|
En faisant ceci, tu déclares une chaîne immodifiable.
A la compilation, le compilo alloue la chaine "looool\n" dans une zone spéciale ("allocation statique" ), et à l'exécution, il fait pointer s sur cette zone, et si tu veux y modifier quelque chose, il y aura une "segmentation fault".
Pour ce que tu veux faire, il faut faire un truc de ce genre:
char s[8];
strcpy(s, "looool\n" );
Ici, le compilo alloue à l'exécution une zone mémoire de 8 octets sur la pile ("allocation dynamique sur la pile), et il remplit ensuite cette zone en copiant la chaîne "looool\n" dans cette zone. Comme précédemment, "looool\n" a été allouée à la compilation, dans une zone spéciale.
ou bien
char *s = malloc(8);
strcpy(s, "looool\n" );
...
free(s);
Ici, le compilo alloue à l'exécution une zone mémoire de 8 octets sur le tas ("allocation dynamique sur le tas), et il remplit ensuite cette zone en copiant la chaîne "looool\n" dans cette zone. Comme précédemment, "looool\n" a été allouée à la compilation, dans une zone spéciale.
L'allocation sur la pile à pour durée de vie le bloc ou la variable est déclarée, il y a libération automatique de la mémoire lorsqu'on en sort. Celle sur le tas a une durée de vie persistante, tant qu'on a pas libéré la mémoire avec free.
A+,
Marsh Posté le 28-03-2013 à 18:43:03
Salut
Tu peux écrire aussi
Code :
|
. Tant que c'est un tableau c'est bon. Ton pb principal, comme le dit gilou, c'est que toi t'as pas défini un tableau mais un pointeur qui a alors été pointé vers une zone statique...
Marsh Posté le 28-03-2013 à 16:59:42
Bonjour,
J'aimerais comprendre pourquoi ma fonction qui remplace un caractère une chaine de caractère ne marche pas (me renvoi "segmentation fault" ).
Le code :
Merci d'avance.