Lire en Tableau de Char* dans un fonction
Mathieu
-
tuxun Messages postés 388 Statut Membre -
tuxun Messages postés 388 Statut Membre -
Bonjour,
J'ai un programme a faire pour un cour et l'une des fonction me cause des problème:
Lire une tableau de chaine de caractère dans une fonction en passant par référence pour que les lecture soit conserver dans le main.
voici ma fonction:
void remplir_Tableau(char* tbl_Elem[4],int nb_Elem)
{
for (int i=0;i<nb_Elem;i++)
{
fflush(stdin);
scanf("%s",tbl_Elem[i]);
}
}
le problème est que lorsque je l'exécute, le programme me renvoie une erreur dès que j'entre la première valeur.
J'ai un programme a faire pour un cour et l'une des fonction me cause des problème:
Lire une tableau de chaine de caractère dans une fonction en passant par référence pour que les lecture soit conserver dans le main.
voici ma fonction:
void remplir_Tableau(char* tbl_Elem[4],int nb_Elem)
{
for (int i=0;i<nb_Elem;i++)
{
fflush(stdin);
scanf("%s",tbl_Elem[i]);
}
}
le problème est que lorsque je l'exécute, le programme me renvoie une erreur dès que j'entre la première valeur.
A voir également:
- Lire en Tableau de Char* dans un fonction
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Tableau word - Guide
- Lire un fichier epub - Guide
- Fonction si et - Guide
- Trier un tableau excel - Guide
3 réponses
#include <stdio.h>
#include <stdlib.h>
void remplir_Tableau(char* tbl_Elem[4],int nb_Elem)
{int i=0;
for (i=0;i<nb_Elem;i++)
{
fflush(stdin);
if(scanf("%s", tbl_Elem[i])<1)exit(EXIT_FAILURE);
printf("%i\n",i);
//scanf prend un pointeur vers un tablo de char et non pas un tablo de 4ptr
}
}
int main (void){
char **tab1=malloc(sizeof(char**));
remplir_Tableau(tab1,4);
return 0;
}
//tuxun.the.free.linuxian@gmail.com
//this doesn't bug;
Ce programme ne risque pas de marcher.
Il manque plein d'allocations.
#include <stdio.h> #include <stdlib.h> char * mmgetstr (void) { char *str = malloc (1000 * sizeof (char)); fgets (str, 1000, stdin); int i = 0; while (str[i] != '\n') i++; str[i] = '\0'; return str; return NULL; } int remplir_ton_Tableau(char** tbl_Elem,int nb_Elem) { int i=0; for (i=0;i<nb_Elem;i++) { *tbl_Elem=(char*)mmgetstr(); if(*tbl_Elem!=NULL) { printf("%i:%s\n",i,*tbl_Elem); *tbl_Elem++; } else return EXIT_FAILURE; } return EXIT_SUCCESS; } int main (void){ char **tab1=malloc(sizeof(char**)); return remplir_ton_Tableau(tab1,4); }Cette version est déjà mieux. Mais tu n'as pas libérer les zones allouées du tas avec free.
Dans ta fonction mmgetstr, tu mets :
Le return NULL; ne sera jamais atteint.
Tu mets également :
while (str[i] != '\n') i++;Très dangereux si la chaîne ne contient pas de \n, ce qui arrive si une longue chaîne est entrée (supérieure à 999). Il faut utiliser également une condition sur i ou utiliser tout simplement strchr de string.h.
Cdlt
je voulais surtout lui montrer le principe que j'aurais appliqué:
un tablo de ptr sur chaine! donc
char **tab=malloc(sizeof(sizeof(char**)); //dans le main a liberer apres utilisation
{scanf(*tab);//ds retourne_un_tablo() //alloue en fonction de la chaine retourné
*tab++;}
et on recommence
...