Bonjour,
je veux créer plusieurs tableaux de chaine de caractères en même temps
est ce que je peux le faire par une boucle for??
Version imprimable
Bonjour,
je veux créer plusieurs tableaux de chaine de caractères en même temps
est ce que je peux le faire par une boucle for??
Bonjour,
Creer un tableau : le declarer, ou bien le remplir ?
Si tu as deja du code, poste-le, afin que nous comprenions mieux ce que tu veux faire.
merci pour votre réponse
bon je veux créer un tableau ensuite le remplir , bon plutôt des tableaux
j'ai une ligne de texte (que j'ai lu à partir d'un fichier et stocké dans une chaine de caractères) cette ligne contient des champs séparés par des ","
à chaque fois que je trouve un "," je dois créer un tableau et dans lequel je stocke la chaine (celle avant le ",") dans ce tableau
bon j'ai fais ce code mais je ne pense pas que c'est vraiment efficace
Code:
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 for (i=0; i<n; i++) { do { le = strcspn(line_aux, ","); // le contient la longeur du segment intial de line_aux ne contenant pas "," strncpy (field, line_aux, le); // field va contenir le 1er champs // création de la colonne char ** Col; Col= calloc(1, sizeof(char *)); if (Col == NULL) { printf("ERROR!!! l'allocation de la mémoire pour le tableau est erronée"); } Col[0] = malloc (le* sizeof(char)); if (Col[0] == NULL) { printf("ERROR!!! l'allocation de la mémoire pour le champs est erronée!!"); } strncpy (Col[0], field, le); // charger le 1er champs contenu dans field dans la 1ére ligne du tableau strcpy(Col[0],"\0"); line_aux = line_aux + le + 2; } while (line_aux = "\0"); // la séparation de la ligne est finie lorsqu'on rencontre le caractère de fin de chaine }
bonjour
j'ai une déclaration d'un typedef d'une pile comme suit:
typedef struct pile {
char * contenu;
struct pile * prec;
} pile;
je veux utiliser un tableaux de piles. je l'ai déclaré ainsi:
pile *TAB[nb_lines];
maintenant je vais utiliser une fonction qui va retourner un tableau de piles. comment j'écris le type de son retour? est ce ainsi que je peux le faire??
pile *TAB[] File_Sep (const char* filename);
vous remerciant,
Ce n'est pas un tableau de pile mais un tableau de pointeurs sur pile. Un tableau de pile estCitation:
je veux utiliser un tableaux de piles. je l'ai déclaré ainsi:
pile *TAB[nb_lines];
Code:pile TAB[nb_lines];
Une fonction ne peut pas retourner un tableau. Elle peut par contre retourner l'adresse du premier élément du tableau.Citation:
maintenant je vais utiliser une fonction qui va retourner un tableau de piles.
Dans ce cas, on a pour un tableau de pile :Si le tableau est un tableau de pointeurs sur pile, on auraCode:pile *File_Sep (const char* filename);
Code:pile **File_Sep (const char* filename);
Attention, le tableau dont on retourne l'adresse du premier élément doit être alloué statiquement (par static ou comme variable globale) ou alloué dynamiquement dans la fonction File_Sep().
Je vous remeeeeeeeeeeeeeeeercie.
très gentil
est ce que l'allocation de TAB ici est bien faite??Code:
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 static pile *File_Sep (const char* filename) { char *temp; temp = File_copy(filename); int NL,NF; NL = line_count (temp); NF = field_count (temp); FILE *file_in; // stream associé à temp /* Nous allons mettre chaque ligne dans une variable de type char* et nous allons séparer les champs de cette ligne */ pile TAB[NL]; /* TAB est un tableau de pile càd chaque case i de TAB va contenir la pile qui contient les champs de la ligne i du fichier */ int i =0; char * line_in; line_in = ""; long int L=0; /* la variable L va contenir la taille déjà lue du fichier */ file_in = fopen (temp, "r"); for (i=0; i<NL, i++) { while ((c=getc(file_in)) != EOF) { while ((c=getc(file_in)) != "\n") { printf("nous allons copier la ligne n°: \n", i); fgets (line_in, MAX_LINE_LEN, temp); } L = L + strlen(line_in); fseek (file_in, L, SEEK_SET); /* pour s'assurer toujours que l'on est dans la ligne qui suit la ligne déjà lue */ printf(" nous sommes dans la ligne n°: \n", i+1); TAB[i]=Sep_Line (line_in); c=getc(file_in); } return (TAB); }
Non, TAB est alors un tableau local à la fonction, donc en allocation automatique. Par conséquent, le tableau est détruit en sortie de la fonction.
Il faut procéder par allocation dynamique.
Ne pas oublier de faire un free() lorsqu'on n'en aura plus besoin :Code:
1
2
3
4
5
6
7
8
9
10
11 static pile *File_Sep (const char* filename) { .... pile * TAB = malloc(NL*sizeof(pile)); if(TAB != NULL) { // le tableau est créé : on peut l'utiliser normalement ..... } return TAB; }
Code:
1
2
3
4
5
6
7
8
9 pile * p = File_Sep (filename); if(p != NULL) { //utiliser les éléments du tableau : p[i] ..... // on n'en a plus besoin free(p); } ....
Merci encore une fois :ccool::ccool::ccool::ccool::ccool: