Bonjour à tous.

Un exercice de codage en C m'a été proposé:

Ecrire un programme qui lit 10 phrases d'une longueur maximale de 200 caractères au clavier et qui les mémorise dans un tableau de pointeurs sur char en réservant dynamiquement l'emplacement en mémoire pour les chaînes. Ensuite, l'ordre des phrases est inversé en modifiant les pointeurs et le tableau résultant est affiché.
J'ai un petit problème en ce qui concerne la modification de l'ordre des phrases en modifiant les pointeurs.

Voici mon code actuel:

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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <stdlib.h>
 
#define NB_PHRASES 10
#define CARACT_MAX 200
 
char** creer_tableau (int, int);
void entrer_phrases (char**, int);
void imprimer_phrases (char**, int);
void modif_pointeurs (char**, int);
 
int main (void) {
	char** tableau=creer_tableau(NB_PHRASES, CARACT_MAX);
	entrer_phrases (tableau, NB_PHRASES);
	printf ("\n");
	imprimer_phrases (tableau, NB_PHRASES);
	modif_pointeurs (tableau, NB_PHRASES);
	printf ("\n");
	imprimer_phrases (tableau, NB_PHRASES);
	return 0;
}
 
char** creer_tableau (int l, int c) {
	int i;
	char** M;
	M=(char**) malloc (sizeof(char*)*l);
	for (i=0; i<l; i++)
		M[i]=(char*) malloc (sizeof(char)*c);
	return M;
}
 
void entrer_phrases (char** M, int l) {
	int i;
	for (i=0; i<l; i++) {
		printf ("Introduisez une phrase:\n");
		gets (M[i]);
	}
}
 
void imprimer_phrases (char** M, int l) {
	int i, j;
	for (i=0; i<l; i++) {
		for (j=0; M[i][j]!='\0'; j++)
			printf ("%c", M[i][j]);
		printf ("\n");
	}
}
 
void modif_pointeurs (char** M, int l) {
	int i;
	char** tmp;
	for (i=0; i<l; i++) {
		tmp=&M[i];
		M[i]=M[l-1-i];
		M[l-1-i]=*tmp;
	}
}
Toutes les procédures et les fonctions fonctionnent sauf celle appelée modif_pointeurs.

Je crée donc un pointeur sur une chaine de caractères (c'est tmp).
Je place l'adresse de M[i] dans tmp mais, lors de l'assignation M[i]=M[l-1-i], la valeur de tmp change (ce qui est normal).
Pouvez-vous m'aider à mieux comprendre ce problème de pointeur, parceque au delà de l'exercie, je pense que c'est vraiment un problème de compréhension des pointeurs.
Je vous remercie d'avance.