Bonsoir à tous, j'ai un petit problème
Tout d'abords je vous explique le prog

Je dois rentrée une chaine de caractère de ce style 'a'b'c' 'd'e'f'\0'

et je doit couper la chaine pour la mettre dans un tableau comme ceci

T[0] = "abc"
T[1] = "def"
T[2] = "NULL"

j'ai réussit à gérer ceci mais j'ai une erreur au niveau de l'affichage te T

ceci c'est pour linux enfaite après suivant ce que j'ai comme symbole je vais devoir faire tel ou tel action en schell

voici le code en entier si vous voulez testé

le main :

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
 
// Giacomoni Jessy et ROUSSET Loïc le 13/12/11
 
#include "cembarque.h"
 
/*          Initialisation des variables globales            */
 
 
 
bool Sortie;
 
int main(void)
{
 
/* Affichage début progr */
 
 
	printf("par : GIACOMONI J. et ROUSSET L. -- derniere modif le 12/12/2011 \r\n\r\n");
	printf("\r\n************************** Bienvenu dans le programme **************************\r\n\r\n");
 
/* Affichage sous prog gestion chaine */
 
	do
	{
		printf("_______________________ SOUS PROG GESTION COUPURE MOT __________________________\r\n");
		printf("Objectif : ce programme permet de couper des chaines de caracteres en les\r\nplacant dans un tableau. \r\n\r\nComment : Quand un caractere specifique apparait nous devons le supprimer et\r\nordonner les chaines dans le tableau.\r\n\r\n");
		printf("\r\n------------------------------ DEBUT DU TRAITEMENT -----------------------------\r\n");
 
		gestionChaine();
 
		printf("\r\n------------------------------- FIN DU TRAITEMENT ------------------------------\r\n");
		printf("_____________________ FIN SOUS PROG GESTION COUPURE MOT ________________________\r\n");
 
		Sortie = reemissionProg();
 
	} while (Sortie == true);
 
 
/* Affichage Fin prog */
 
	printf("\r\n******************************* Fin du programme *******************************\r\n\r\n");
	getchar();
	exit(0);
	return EXIT_SUCCESS;
}
Le.H

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
 
/* Appels aux bibliothèques*/
 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//#include <stdbool.h>
 
/* Déclaration sous programme*/
 
 
void gestionChaine();
void PurgeStdin();
char* saisieClavier();
bool reemissionProg();
void afficher_mots(char const * const * resultat);
un sous prog:
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
 
// Giacomoni Jessy et ROUSSET Loïc le 13/12/11
// Ce programme permet de gérer la demande de répétition du programme ou non
 
 
#include "cembarque.h"
 
bool reemissionProg()
{
	char Commande[1];
	bool Sortie = false;
 
	printf("Voulez-vous reexecuter le programme? (O/N) : ");
	scanf("%c",Commande);
	PurgeStdin();
 
	while (Commande[0] != 'O' && Commande[0] != 'N')
	{
		printf("\r\nCaractere invalide recommancez\r\n\r\n");
		printf("Voulez-vous reexecuter le programme? (O/N) : ");
		scanf("%c",Commande);
		PurgeStdin();
	}
 
	if (Commande[0] == 'O' || Commande[0] == 'N')
	{
		if (Commande[0] == 'O')
		{
			Sortie = true;
			printf("\r\n\r\n Appuyer sur Entree pour continuer\r\n\r\n");
		}	
 
		else 
		{
			Sortie = false; 
			printf("\r\n\r\n Appuyer sur Entree pour continuer\r\n\r\n");
		}
	}
 
	PurgeStdin();
	return Sortie;
 
}
et les autres

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
 
/* Giacomoni Jessy et ROUSSET Loïc le 17/12/11
permet la découpe d'une chaine de caractère suivant les symbole <  >  &  |  \t  ' '  \0  \n \r
 
printf : affichage sur la console
free : libère la mémoire après avoir fait un mallo
 
*/
 
#include "cembarque.h"
 
 
/* renvoie un tableau contenant l'ensemble des mots de chaine
realiser un free sur le premier mot puis sur le resultat de la fonction quand on n'en a plus besoin */
void gestionChaine()
{
  unsigned int taille;
  unsigned int nb_mots = 0;
  unsigned int parcourTab, parcourTab2;
  char* texte;
  char** resultat;
 
  char*chaine = saisieClavier();
 
  /* on calcule la taille de chaine et le nombre de mots de chaine */
 
  for(parcourTab = 0; chaine[parcourTab] != '\0'; parcourTab++)
  {
    if((chaine[parcourTab] == ' ') || (chaine[parcourTab] == '<') || (chaine[parcourTab] == '>') || (chaine[parcourTab] == '&') || (chaine[parcourTab] == '|') || (chaine[parcourTab] == '\r') || (chaine[parcourTab] == '\t') || (chaine[parcourTab] == '\n') || (chaine[parcourTab] == '\0'))
      nb_mots++;
  }
  taille = parcourTab;
 
  /* on fait les allocations correspondantes */
 
  texte = (char*) malloc(sizeof(char) * (taille + 1));
  resultat = (char**) malloc(sizeof(char*) * (nb_mots + 1));
 
  /* echecs  */
 
	if( texte == NULL )
	{
		 fprintf(stderr,"Allocation impossible \n");
		 exit(EXIT_FAILURE);
	}
 
	if( resultat == NULL )
	{
		 fprintf(stderr,"Allocation impossible \n");
		 exit(EXIT_FAILURE);
	}
 
  /* on met le premier mot dans le tableau et on met le dernier mot a NULL pour savoir quand le tableau s'arrete */
 
  resultat[0] = texte + '\0';
  resultat[nb_mots] = NULL;
  texte[taille] = '\0';
 
  /* on copie chaine dans texte en remplacant les espaces par des fins de chaine en ajoutant les debuts de mot a res */
  parcourTab2 = 1;
 
  for(parcourTab = 0; parcourTab < taille; parcourTab++)
  {
    if((chaine[parcourTab] == ' ') || (chaine[parcourTab] == '<') || (chaine[parcourTab] == '>') || (chaine[parcourTab] == '&') || (chaine[parcourTab] == '|') || (chaine[parcourTab] == '\r') || (chaine[parcourTab] == '\t') || (chaine[parcourTab] == '\n') || (chaine[parcourTab] == '\0'))
    {
      texte[parcourTab] = '\0';
      resultat[parcourTab2] = texte + parcourTab + 1;
      parcourTab2++;
    }
    else
      texte[parcourTab] = chaine[parcourTab];
  }
	afficher_mots(resultat);
	free(resultat);
	texte=NULL;
	free(texte);
 
}
 
void afficher_mots(char const * const * resultat)
{
  unsigned int affichage;
  for(affichage = 0; resultat[affichage] != NULL; affichage++)
    printf("mot %d : %s\n", affichage, resultat[affichage]);
  resultat = NULL;
}
 
 
/* Giacomoni Jessy et ROUSSET Loïc le 12/12/11
PurgeStdin permet de vider le fichier stdin (fichier d'entrée sortie ici pour la saisie clavier)
utilisation de getchar : permettant de retourné le nombre de caractère*/
 
void PurgeStdin()
{
    int c;
 
    c = getchar();
    while ((c != '\0') && (c != '\n'))
        c = getchar();
 
}
 
 
/* Giacomoni Jessy et ROUSSET Loïc le 14/12/11
 
saisieClavier permet de gérer la saisie clavier, (les erreurs ...)
 
malloc : détermine l'espace mémoire prix par le tableau suivant le nombre de caractère que l'utilisateur souhaite
getchar : permettant de savoir le nombre de caractère
printf : affichage sur la console
scanf : permet de récuper dans une variable ce qu'à entré l'utilisateur (ne prend pas en charge les espaces)
fgets : idem scanf sauf que l'on peut déliminer la taille que l'on veut récupérer (il prend en charge les espaces)*/
 
 
 
char *saisieClavier()
{
 
/*          Initialisation des variables             */	
 
	int nbCaract=0;
	char* text = NULL;
	char* buffer = NULL;
 
// Malloc du tableau
 
	buffer = (char*) malloc(sizeof(char)*(TAILLE));
 
	if( buffer == NULL )
	{
		 fprintf(stderr,"Allocation impossible");
		 exit(EXIT_FAILURE);
	}
 
// Demande saisi d'une phrase dans buffer + déplacement dans text
 
	printf("\r\nSaisie votre chaine (avec separateur) :\r\nICI ->  \n");  
	fgets(buffer, TAILLE, stdin);
	nbCaract = strlen(buffer) - 1;
	text = (char*) malloc(sizeof(char) * (nbCaract)); 
 
	if( text == NULL )
	{
		 fprintf(stderr,"Allocation impossible");
		 exit(EXIT_FAILURE);
	}
 
    PurgeStdin();
	strcpy(text,buffer);
	buffer = NULL;
	free(buffer);
	printf ("Si la chaine de depart est : %s \n", text);
	printf ("Le tableau a 2 dimensions sera consitue de : \n");
	return text;
}
il y a 1 semaine le programme coupé bien la chaine mais le prof m'a dit de recommencer et m'a dit c'est pas juste un prog pour couper la chaine

mais après suivant tes séparateurs tu va faire un traitement donc j'ai recommencé

dites moi si cela va pour faire du shell après

merci et oui aussi pouvez vous me dire pourquoi j'ai un problème d'affichage à la fin j'ai un message d'erreur quand je veux affiché RESULTAT[] (le programme s'execute mais plante à la fin)

merci beaucoup