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;
Salut.
Je pense que c'est une histoire d'allocation mémoire non faites (il faudrait voir ce que tu as mis dans le main)
Je pense que c'est une histoire d'allocation mémoire non faites (il faudrait voir ce que tu as mis dans le main)
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
...