Au secours ! Tableau perd ses données :-(

cs_Michel76 Messages postés 13 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 24 janvier 2007 - 4 mars 2003 à 15:29
cs_Michel76 Messages postés 13 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 24 janvier 2007 - 7 mars 2003 à 13:38
Un de mes tableaux perd totalement ses données. Que se passe-t-il ? Comment y remédier ????

for(i=0;i<nb_codes;i++)
printf("codes : %s\n",codes[i]); /* Affiche correctement */

while((read(fichier_donnees,ligne_fichier,longueur_ligne))!=0)
{

for(i=0;i<nb_codes;i++)
printf("codes : %s\n",codes[i]); /* Affiche n'importe quoi */

Merci davance

Michel

8 réponses

crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
4 mars 2003 à 15:46
Comment alloue tu ton tableau ?

Hart
0
cs_Michel76 Messages postés 13 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 24 janvier 2007
4 mars 2003 à 15:59
Merci Hart d'essayer de m'aider.

Voilà en détail rapide, je veux récupérer des lignes se trouvant dans un fichier et les placer dans un tableau.
Je ne connais pas le nombre de lignes.
Mais connais la longueur des lignes (toutes de même longueur) par la variable longueur_code, alors j'ai essayé de la sorte :

----------------
char * *codes;
int nb_codes;
char *ligne_fichier;

ligne_fichier=malloc(long_code_carte*sizeof(char));
codes = malloc(4*sizeof(char));
nb_codes=0;

fd=fopen("fichier.txt","r");

while((fscanf(fd,"%s",ligne_fichier))!=EOF)
{
codes=realloc(codes,(nb_codes+1)*sizeof(char *));
codes[nb_codes]=malloc((longueur_code+1)*sizeof(char));
strcpy(codes[nb_codes++],ligne_fichier);
}
fclose(fd);
----------------
Juste après :

for(i=0;i<nb_codes;i++)
printf("codes : %s\n",codes[i]);

affiche correctement, mais perd toutes les infos quelques lignes plus loin.

J'imagine que mon code est très "sal", je suis pressé et désespéré, du coup j'écris n'importe quoi et je ne sais plus comment n'en sortir.

Michel
0
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
4 mars 2003 à 16:37
J'ai essayer sous BC++ 5 et ca fonctionne parfaitement :

#include <stdlib.h>
#include <stdio.h>

main()
{
char * *codes;
int nb_codes;
char *ligne_fichier;
int long_code_carte=4;
int longueur_code=4;
int i;
FILE* fd;

ligne_fichier=malloc(long_code_carte*sizeof(char));
codes = malloc(4*sizeof(char));
nb_codes=0;

fd = fopen("fichier.txt","r");

while((fscanf(fd,"%s",ligne_fichier))!=EOF)
{
//printf("codes : %s\n",ligne_fichier);
codes=realloc(codes,(nb_codes+1)*sizeof(char *));
codes[nb_codes]=malloc((longueur_code+1)*sizeof(char));
strcpy(codes[nb_codes++],ligne_fichier);
}
fclose(fd);

for(i=0;i<nb_codes;i++)
printf("codes : %s\n",codes[i]);
}

Dit moi si ca marche chez toi ???

A+ Hart
0
cs_Michel76 Messages postés 13 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 24 janvier 2007
4 mars 2003 à 16:52
Mis à part la ligne :
//printf("codes : %s\n",ligne_fichier);
que mon compilateur C sous Unix ne comprends pas, ça fonctionne.
Apparement, c'est le même code que je t'avais donné (?).

Comment se fait-il que la même chose dans un code "plus fourni" le tableau se rempli de n'importe quoi quelques lignes plus bas ?

Snif

Michel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
4 mars 2003 à 16:57
Aucune idée !! Pourquoi n'éssay tu pas en c++ avec le compilateur gcc ? en incluant iostream.h, cout et compagnie ?

Dit moi si tu veut des info., et aussi pourquoi tu prog en C et pas en C++ ?

Hart
0
cs_Michel76 Messages postés 13 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 24 janvier 2007
4 mars 2003 à 17:43
Je viens de trouver pourquoi : une connerie !
Désolé Hart pour le temps perdu.
Merci à toi en tout cas.
Je travaille pour une société de service, d'habitude je bosse à droite à gauche pour gérer des petites équipes de développeurs sur plein de langages différents surtout C++, VB, HTML-JavaScript-VBScript, mais là je fais le pompier pour une société. Je deviens par la force des choses développeur l'espace d'un instant. Ici : un enchevêtrement de programme en C mals foutus... qui ne fonctionne pas !

Je passe pour éteindre le feu... et quand je repartirais vendredi : faudra que ça fonctionne et bien sûr pas le temps de tout réécrire en C++

Super boulot que l'on peut faire !!!

Merci encore

Michel
0
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
5 mars 2003 à 08:24
Ca venait d'ou alors, juste par curiosité ?
Hart
0
cs_Michel76 Messages postés 13 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 24 janvier 2007
7 mars 2003 à 13:38
ligne_fichier qui était affecté entre deux, parmi plein de lignes de codes pourri, je n'avais pas fait gaffe.

Michel
0
Rejoignez-nous