[C]Chaine qui ne s'affiche pas...

Chaine qui ne s'affiche pas... [C] - C - Programmation

Marsh Posté le 28-11-2013 à 20:37:21    

Bonjour, j'ai un petit problème, je dois afficher le champ d'une structure que j'ai créé qui est une chaine de caractère  :pt1cable:  
 
Donc voici mon code :
 

Code :
  1. FILE* ptMem;
  2.     smartphone stockage;
  3.     int i=1;
  4.     ptMem=fopen(nomFich,"rb" );
  5.     if(ptMem==NULL){
  6.         printf("Erreur dans l'ouverture du fichier. Le programme va se fermer." );
  7.         exit(-1);
  8.     }
  9.     else{
  10.         do{
  11.             fread(&stockage, sizeof(smartphone), 1, ptMem);
  12.             printf("\n\tsmartphone numero %d :\n",i);
  13.             printf("Nom du modele : %s \n",stockage.nom);
  14.             printf("Portable de marque : " );
  15.             switch(stockage.numFabricant){
  16.                 case 1: printf("Samsung\n" );
  17.                     break;
  18.                 case 2: printf("LG\n" );
  19.                     break;
  20.                 case 3: printf("Apple\n" );
  21.                     break;
  22.                 case 4: printf("Nokia\n" );
  23.                     break;
  24.                 case 5: printf("Blackberry\n" );
  25.                     break;
  26.                 default: printf("####\n" );
  27.             }
  28.             printf("Poids de %d grammes\n",stockage.poids);
  29.             printf("Prix de %d Euros.\n",stockage.prix);
  30.             i++;
  31.             system("pause" );
  32.         }while(feof(ptMem));
  33.     }
  34.     fclose(ptMem);


 
Quand je lance mon programme, la marque du modèle s'affiche, le poids et le prix aussi mais impossible d'afficher ce que j'ai mis dans le champ nom (ma chaine de caractère)
Et voici la structure :
 

Code :
  1. typedef struct{
  2.     char* nom;
  3.     int numFabricant;
  4.     int poids;
  5.     int prix;
  6. }smartphone;


 
Voila je sais pplus trop d'ou ça peut venir... merci de votre aide :)

Reply

Marsh Posté le 28-11-2013 à 20:37:21   

Reply

Marsh Posté le 28-11-2013 à 22:45:23    

un petit up parceque je bloque vraiment j'arrive pas afficher cette satané chaine de caractères ! merci ;)

Reply

Marsh Posté le 28-11-2013 à 23:25:16    

Bonjour !
 
Quand vous avez effectué la sauvegarde dans votre fichier, vous avez sauvegardé dans "nom" un pointeur, c'est-à-dire une adresse mémoire valide au moment de la sauvegarde.
 
Quand vous relisez la structure à partir du fichier, vous récupérez la valeur du pointeur qui a été sauvegardée, mais rien ne dit (et il y a à peu près aucune chance que cela soit le cas ...) que cette adresse soit toujours valide.
 
Vous devez donc sauvegarder la chaine, par exemple en modifiant la structure pour avoir un truc du genre "char nom[80];" (en prenant large et à vous de gérer ensuite la taille de cette chaîne dans les fonctions qui en modifient le contenu).
 
Bonne continuation !

Reply

Marsh Posté le 28-11-2013 à 23:27:02    

Merci, j'avais complètement oublié cette subtilité :) effectivement si je n'impose pas une taille maximale a mon tableau de caractères cela risque de beaucoup moins bien marcher !

Reply

Sujets relatifs:

Leave a Replay

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