Modifier valeur d'un char **

Résolu/Fermé
Nerethim Messages postés 2 Date d'inscription jeudi 11 février 2016 Statut Membre Dernière intervention 12 février 2016 - 11 févr. 2016 à 23:15
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 12 févr. 2016 à 10:31
Bonjour,

Je suis en train de réaliser un petit projet pour mon école mais ça fait un bout de temps que je galère sur une bêtise (du moins je l'espère).
alors voilà, imaginons que j'ai ça :

int	main()
{
char **map;

map = malloc(sizeof(char *) *2);
map[0] = "abc";
map[1] = "def";
}


ici je souhaiterai modifier par exemple la valeur de du charactère 'b', donc naturellement j'essai de faire map[0][1] = 'x'; sauf que ici je me mange une erreur de segmentation ..
Avez vous déjà rencontrer cette problématique ?

Merci d'avance !

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
11 févr. 2016 à 23:43
Bonjour,

Tu veux créer un tableau de tableaux.
Il faut allouer le tableau, mais aussi chacune des lignes!

int	main()
{
  char 	**map;

  map =	malloc(sizeof(char *) *2);
  for ( int i = 0 ; i < 2 ; ++i )
  {
      map[i] = malloc( sizeof(char) * 4 ); // pour 3 caracteres + 1 terminateur
  }
  strcpy( map[0] , "abc" );
  strcpy( map[1] , "def" );
 
  map[0][1] = 'x';
}
1
Nerethim Messages postés 2 Date d'inscription jeudi 11 février 2016 Statut Membre Dernière intervention 12 février 2016
12 févr. 2016 à 09:53
Merci infiniment ! :)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 févr. 2016 à 10:31
A noter, que le bon prototype est : int main(void), qu'il ne faut pas oublier le return 0; final et qu'il faut penser à utiliser free() pour libérer les ressources allouées avant la fin du programme.
0