Help ! probleme de char* en C

Help ! probleme de char* en C - C - Programmation

Marsh Posté le 23-04-2005 à 16:34:05    

Salut à tous , voila j'ai un enorme probleme de char* depuis quelques temps et vu ma totale incompetence en C je trouve pas la solution , si quelqu'un peut m'aider!
 
 

Code :
  1. char** listNoms;
  2. char nom[20];
  3. fscanf(fp,"Nombre de noms: %d\n",&numNoms);
  4. listNoms=(char**)malloc(numNoms*sizeof(char*));
  5. for(i=0;i<numNoms;i++){
  6.  fscanf(fp,"NOM :%s\n",nom);
  7.  listNoms[i]=(char*)malloc(sizeof(char)*20);
  8.  strcpy(listNoms[i],nom);
  9. }


 
Voila mon code, en gros il doit recuperer a partir d'un fichier texte une liste de noms.
Mon problème est que lorsque je fais un printf de mon tableau listNoms ca affiche bien tous mes noms, donc ce bout de code est sensé fonctionner, mais quand je veux reutiliser ma listeNom plus tard dans une autre fonction, ca ne marche pas.
 
Par exemple si je fais :
 
afficherNom(listNoms[0]);
 
avec cette fonction definie comme void afficherNom(const char * nom);
 
mon compilateur bug. Si quelqu'un connait la solution parce que la je suis en train de peter un cable ^^.
 
Merci
 
 
 

Reply

Marsh Posté le 23-04-2005 à 16:34:05   

Reply

Marsh Posté le 23-04-2005 à 19:36:29    

bria a écrit :

Salut à tous , voila j'ai un enorme probleme de char* depuis quelques temps et vu ma totale incompetence en C je trouve pas la solution , si quelqu'un peut m'aider!


L'incompétence, ça se guérit. Il suffit de s'y mettre progressivement et efficacement. Il y a des livres et des tutoriels pour ça...

Citation :


<...>
Voila mon code,


Ne compile pas. C'est ça le bug ?

Citation :

mon compilateur bug.


"Pas assez précis mon fils". Quel bug ?
 

  • Il faut poster du code complet mais réduit au minimum qui montre le problème
  • Si nécessaire (comme ici), il faut poster un exemple de fichier texte
  • Préciser la nature du problème (compilation, exécution...)
  • Bref on a beau être des supers gourous, on est pas encore des magiciens...


Message édité par Emmanuel Delahaye le 23-04-2005 à 19:38:29

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-04-2005 à 19:40:36    

Oups désolé c'est vrai que ca manque de précision.
L'erreur est que ca compile pas et que j'ai une erreur de type Access Violation lors de mon afficherNom.
 
Mon fichier texte :
 
NOM "alain"
NOM "robert"
...

Reply

Marsh Posté le 23-04-2005 à 19:43:08    

désolé, on a pas fait bac V nous :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 23-04-2005 à 19:49:17    

Bon laisser tomber c'est reglé

Reply

Marsh Posté le 23-04-2005 à 20:00:33    

bria a écrit :


for(i=0;i<numNoms;i++){  
        fscanf(fp,"NOM :%s\n",nom);  
        listNoms[i]=(char*)malloc(sizeof(char)*20);  
        strcpy(listNoms[i],nom);  
    }




 
On peut se passer de la variable "nom"

for(i=0;i<numNoms;i++){  
        listNoms[i]=(char*)malloc(sizeof(char)*20);  
        fscanf(fp,"NOM :%s\n",listNoms[i]);  
    }



---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 23-04-2005 à 20:03:20    

for(i=0;i<numNoms;i++){  
        listNoms[i]=(char*)malloc(sizeof(char)*20);  
        if(listNoms[i] != NULL) fscanf(fp,"NOM :%s\n",listNoms[i]);  
    }


[:aloy]


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 23-04-2005 à 20:36:03    

Sve@r a écrit :

On peut se passer de la variable "nom"

for(i=0;i<numNoms;i++){  
        listNoms[i]=(char*)malloc(sizeof(char)*20);  
        fscanf(fp,"NOM :%s\n",listNoms[i]);  
    }



Sauf que si le nom lu fait plus de 19 caractères, c'est la mort...


Message édité par Emmanuel Delahaye le 23-04-2005 à 20:36:28

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-04-2005 à 20:39:37    

bria a écrit :

Oups désolé c'est vrai que ca manque de précision.
L'erreur est que ca compile pas et que j'ai une erreur de type Access Violation lors de mon afficherNom.


Gni ? Ca ne compile pas et tu arrives à éxécuter ? T'es fort toi!

Citation :

Mon fichier texte :
 
NOM "alain"
NOM "robert"


char nom[20];
<...>
    fscanf(fp,"NOM :%s\n",nom);



Y'a rien qui te choque là ? Il faut contrôler si la conversion s'est bien faite. Et que se passe-t-il si le nom lu fait plus de 19 caractères ?


Message édité par Emmanuel Delahaye le 23-04-2005 à 22:39:41

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-04-2005 à 22:35:07    

Emmanuel Delahaye a écrit :

Sauf que si le nom lu fait plus de 19 caractères, c'est la mort...


 
J'ai pas voulu écrire un code anti bug, j'ai juste voulu écrire le même programme que proposé au début mais en y enlevant les variables inutiles...
 
J'ai admis d'emblée que le fichier lu ne contenait que des noms de moins de 20 car...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed