IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème avec les pointeurs


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 52
    Points
    52
    Par défaut Problème avec les pointeurs
    Bonjour à tous,

    Une petite question :
    lorsque je veux nommer un fichier et que je le fait avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(output_file,"Fichier.ppm");
    Il se trouve que mon fichier qui en ressort a le nom suivant 'Fichier.ppm0'.
    Ce n'est pas un gros probleme en soi, mais il se trouve que mon ordinateur n'affiche pas les fichiers avec une extension '.ppm0' .
    D'ou mon probleme (Je sort beacoup d'image lors d'un calcul)

    Je pense qu'il se passe quelque chose avec le dernier charactere de la chaine de charactere (/0). Mias je n'arrive pas à mettre la main sur la petite bete...

    Quelqu'un aurait il une idée d'ou se cache l'erreur ?

  2. #2
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(output_file,"Fichier.ppm\0");
    ça marche bien?
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Une chaine littérale est toujours terminée par '\0' de toute façon, ce ne serait pas une chaine sinon.

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par latitude38 Voir le message
    lorsque je veux nommer un fichier et que je le fait avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(output_file,"Fichier.ppm");
    Il se trouve que mon fichier qui en ressort a le nom suivant 'Fichier.ppm0'.
    Ce n'est pas un gros probleme en soi, mais il se trouve que mon ordinateur n'affiche pas les fichiers avec une extension '.ppm0' .
    Comment est déclaré output_file ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 52
    Points
    52
    Par défaut
    Salut,

    Non, lorsque je met '\0' à la fin de mon nom de fichier, cela n'améliore rien.

    'outputfile' est déclaré comme ceci :

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Le mieux serait quand même de nous montrer le code qui pose problème.

  7. #7
    Membre régulier Avatar de mikhailo
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 78
    Points : 75
    Points
    75
    Par défaut
    Essaie peut-être différemment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char* output_file = (char*)malloc((strlen("Fichier.ppm")+1) * sizeof(char));
    ...
    strcpy(output_file, "Fichier.ppm");
    Sans oublier le free(output_file) à la fin du programme.
    "Les hommes et les femmes qui, sans bouger de leur bureau ou de leur bibliotheque, sans développer leur puissance corporelle et leurs infinies dimensions, parviennent, par une opération de la conscience, à une tristesse pessimiste qui se pretend lucide ne font que constater, sans le savoir, que toute identification du multiple de la vie à la vacuite de la conscience mène inévitablement à ce pessimisme et cette impuissance."

    extrait de "La fragilité" de Benasayag

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 52
    Points
    52
    Par défaut
    C'est difficile de vous montrer le code, car en fait il est trèèèèèèèèèèèèèèès long !
    C'est pour cela que je ne vous en montre qu'une partie.

    D'ailleurs en fait, le problème est un peu différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          sprintf(output_file,"%s.%05d.ppm ",E->control.data_file,file_number)
    avec qui dépend du fichier entrée... donc on ne connait pas à priori sa longueur et je ne peux pas allouer exactement le nombre de charactere (cf commentaire plus haut)

    Par contre, j'ai remarqué qqch de bizarre tout à l'heure :
    lorsque je rentre un espace après ppm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          sprintf(output_file,"Fichier.ppm  ")
    il me sort des fichier avec une extension en '.ppm 0' !!

    Vous n'avez jamais rencontré ce problème de nom de fichier ?

  9. #9
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Même avec un fichier très long, isoler une partie à problème n'est pas insurmontable. D'ailleurs, je ne vois pas de problème. Mais avec le peu d'infos que tu donnes, c'est dur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <stdio.h>
     
    int main(void)
    {
        char output_file[255];
        size_t file_number = 0;
     
        while(file_number < 12)
        {
            //sprintf(output_file,"%s.%05d.ppm ",E->control.data_file,file_number)
            sprintf(output_file,"%s.%05d.ppm ","filename",file_number);
            puts(output_file);
            file_number++;
        }
        return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    filename.00000.ppm
    filename.00001.ppm
    filename.00002.ppm
    filename.00003.ppm
    filename.00004.ppm
    filename.00005.ppm
    filename.00006.ppm
    filename.00007.ppm
    filename.00008.ppm
    filename.00009.ppm
    filename.00010.ppm
    filename.00011.ppm
     
    Process returned 0 (0x0)   execution time : 0.015 s
    Press any key to continue.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    C'est difficile de vous montrer le code, car en fait il est trèèèèèèèèèèèèèèès long !
    Pas tout le code, mais le code qui pose problème ou un code qui reproduit le même problème.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 52
    Points
    52
    Par défaut
    Rebonjour ,

    j'essaie de faire le tri, et voici une partie de ce fichier (un code plus compliqué est derrière) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
     
    /* Routine to process the output of the finite element cycles
       and to turn them into a coherent suite of files.
    */
     
    #include <math.h>
     
    #if(!defined __GNUC__)
    #include <malloc.h>
    #include <stdlib.h>             /* for "system" command */
    #endif
     
    #ifndef __sunos__               /* string manipulations */
    #include <strings.h>
    #else
    #if(!defined __GNUC__)
    #include <string.h>
    #endif
    #endif
     
    #if(!defined __GNUC__)
    #include <rpc/rpc.h>
    #include <rpc/xdr.h>
    #endif
     
    #include "element_definitions.h"
    #include "global_defs.h"
     
    /* Output files are created, if requested, using the global filename plus a numerical tag.
     
       Data is stored according to type:
       1. Nodal information (for a given timestep)
       2. Horizontal averages (for a given timestep)
       3. Surface observables (and other slices) (for a given timestep).
       4. Large-scale averages recorded as time sequence.
     
       The format of the output is a header including individual column labels
       which are required because the information stored can vary. The
       comment character in these files is a `#' terminated by the end of the
       line.
     
       NOTE FOR IMPROVEMENT:  THE NODE OUTPUT STRING CAN BE USED FOR THE COLUMN LABELLING
       INSTEAD OF DOING THE CHECKING TWICE.
    */
     
    void generic_data_storage(
    			  struct All_variables *E,
    			  int file_number
    			  )
    {
      int i,j,k,ii,number,node,data_length,sample,l,m,el;
      int record_everything,checkpt_and_log,only_timelog;
      char output_file[255];
      char output_filePPM[255];
      char command[255];
     
      FILE *fp;
     
      int i_tmp,block,tr;
      float f_tmp;
      double d_tmp;
      float  *data_array;
     
      static int been_here=0;
      static int time_files=0;
     
      float test;
     
      standard_precision storage_timing,checkpt_timing;
      standard_precision time,time1,CPU_time();
      standard_precision errorva,errorvr,errorra,errorrr,R,Gc,G,sum1,sum2,sum,sumcte,sumerrorav,sumerrorar,sumerrorrv,sumerrorrr;
      standard_precision CC,DD,Co,Si,MM,ave,delta,AA,BB,ta,mu,sigma,omeg,eta1,eta2,eta3,fact,Q,QQ,VV[5];
      standard_precision lN[ELNMAX+1],visc,visc_bulk,theo_GR,axial_stress,stress;
      standard_precision vel[1000],velfft[1000],mag ;
      standard_precision Omega0,Omega1,Omega2,xsie,xsip,kk,a,b,c,k0 ;
      standard_precision maxP,minP,meanP,S11,S12,S22,deflection,upper,lower ;
     
      const int dofs = E->mesh.dof;
      const int dims = E->mesh.nsd;
      const int nno = E->mesh.nno;
      const int outputcase = E->control.outputcase;
     
      /* The data files are written permanently once every "storage_timesteps" steps.
         This is computed in the mean sense .... once the time since the last
         write exceeds "storage_timesteps" * the mean timestep then the data are
         saved for posterity. Otherwise they are just checkpointed
         to the .00000. files */
     
    /*i=524 ;
        fprintf(E->fp2,"%.7e %.7e %.7e %.7e %.7e \n",E->monitor.elapsed_time,
    	E->tracer.S11[i],E->tracer.S22[i],E->tracer.S12[i],E->tracer.Pt[i]);*/
     
      fflush(E->fp1) ;
      fflush(E->fp2) ;
     
      /* If timings have already been supplied, then use these.
         Otherwise compute them */
     
      if(E->control.storage_timing != 0.0)
        storage_timing = E->control.storage_timing;
      else if(E->advection.total_timesteps != 0)
        storage_timing = (E->monitor.elapsed_time/E->advection.total_timesteps) * E->control.storage_timesteps;
     
      if(E->control.checkpt_timing != 0.0)
        checkpt_timing = E->control.checkpt_timing;
      else if(E->advection.total_timesteps != 0)
        checkpt_timing = (E->monitor.elapsed_time/E->advection.total_timesteps) * E->control.checkpt_timesteps;
     
      /* What to do ? */
     
      record_everything = checkpt_and_log = 0;
     
        if(E->monitor.solution_cycles == 1) {
          record_everything = 1;
          checkpt_and_log=1;
        }
        else if ((E->monitor.elapsed_time - E->monitor.time_of_last_store) >  storage_timing) {
          record_everything = 1;
          checkpt_and_log = 1;
          E->monitor.time_of_last_store = E->monitor.time_of_last_checkpt = E->monitor.elapsed_time;
        }
        else if ((E->monitor.elapsed_time - E->monitor.time_of_last_checkpt) >  checkpt_timing)  {
          E->monitor.time_of_last_checkpt = E->monitor.elapsed_time;
          checkpt_and_log = 1;
        }
     
        time1=CPU_time();
     
        /* Periodic boundary conditions do not calculate anything on the
           wrapped around edge nodes. These must be copied before storing
           the data */
     
        if(E->mesh.periodic_x || E->mesh.periodic_y)  {
    	flogical_mesh_to_real(E,E->NQ[E->mesh.levmax],E->mesh.levmax);
    	flogical_mesh_to_real(E,E->T,E->mesh.levmax);
    	flogical_mesh_to_real(E,E->Psi,E->mesh.levmax);
    	flogical_mesh_to_real(E,E->V[1],E->mesh.levmax);
    	flogical_mesh_to_real(E,E->V[2],E->mesh.levmax);
    	if(3==dofs) {
    	  flogical_mesh_to_real(E,E->V[3],E->mesh.levmax);
    	}
    	else if(6==dofs) {
    	  flogical_mesh_to_real(E,E->V[3],E->mesh.levmax);
    	  flogical_mesh_to_real(E,E->V[4],E->mesh.levmax);
    	  flogical_mesh_to_real(E,E->V[5],E->mesh.levmax);
    	  flogical_mesh_to_real(E,E->V[6],E->mesh.levmax);
    	}
       }
     
        if(checkpt_and_log) {
          /* As it is time-consuming to compute the nodal plastic strain
    	 value, do this only if it needs to be printed out ... */
     
          if((strstr(E->control.node_data.which_data_types,"Pstn"))) {
    	if(E->advection.timesteps > 0)
    	gs_tracers_to_nodes(E,E->Pstrain,NULL,NULL,NULL,E->tracer.edotp_integrated,E->mesh.levmax,0);
          }
     
        /* Generate pixmap for 2D data */
        if((E->control.verbose || checkpt_and_log) && E->mesh.nsd == 2 && !E->control.CYLINDER && !E->control.SPHERE) {
          sprintf(output_filePPM,"%s.%05d.ppm",E->control.data_file,file_number);/*sprintf(output_file,"Fichier.ppm");*//*Test*/
          generate_2Ddata_pixmap(E,output_filePPM);
           }
        }
        been_here++;
        return;
     
      free(output_file);
      free(output_filePPM);
      free(command);
    }
    A mon avis ceci n'est pas compilable.

    Je pense que ce n'est pas très utile comme information .. mais je n'arrive pas à 'écrémer' plus car évidemment si je monte les 3 lignes toutes seules dans un fichier indépendant, ca marche très bien !

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Si tu tapes le code de pfeuh dans un nouveau projet, ça te donne quel résultat ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 52
    Points
    52
    Par défaut
    ca marche bien sur !

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 52
    Points
    52
    Par défaut Solution à un probleme
    Bonjour à tous,

    Désolée de vous avoir inondé de code, j'ai fait ce que j'ai pu pour réduire au nécessaire, mais ce n'est vraiment pas simple.
    Après avoir réfléchi au problème, je me suis rendue compte que si ce morceau de code écrivait l'extension, celle -ci était reprise à un autre endroit du code qui n'avait rien à voir, et où l'extension était réécrite avec un indice (je ne sais pas pourquoi, car un fichier .PPM'indice' ne peut pas afficher d'image !)

    Donc effectivement le problème ne se trouvait pas du tout dans mes 1500 lignes de mon fichier c....
    Merci de vos idée en tout cas ! s

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 52
    Points
    52
    Par défaut
    Et sans doute à une prochaine!

  16. #16
    Nouveau Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Urgent
    bsr à tous j une petit exercice à résoudre et je suis une débutante j'aimerais que vous m'aidiez :

    dans une faculte chaque etudiant defenitpar:
    son non(40)son prenon(40) sa date de naissance(jour,annee,mois)son numero de carte etudiant(entier)par lenombre de matierequi'il passe(un max 10 matiere)et par sa moyen
    chaque matiere et defenie par sa nom(30)son cofficient et sa moyen
    1)prooser une structure de donne a ce proplemme
    2)faire la saisaie a n etudiant
    3)affichier la liste de tous les etudiant(nom,prenom,numero de carte etudiant,moyen)dans l'ordre croissant de leurs moyenne

    ET MERCI D'AVANCE

  17. #17
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour et bienvenue sur le forum, anissabf,

    Au cas où t'aies pas remarqué, on crée une nouvelle discussion pour poser une question, et ensuite merci de ne pas confondre www.developpez.com (ce site), et www.onFaitVosDevoirs.com
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec les pointeurs intelligents de boost.
    Par Le Barde dans le forum Boost
    Réponses: 2
    Dernier message: 05/09/2007, 12h47
  2. Petit problème avec les pointeurs et variable
    Par mitherkiller dans le forum C
    Réponses: 5
    Dernier message: 09/03/2007, 22h05
  3. problème avec les pointeurs en c
    Par dialloma dans le forum C
    Réponses: 14
    Dernier message: 01/01/2007, 21h22
  4. probléme avec les pointeurs
    Par killer_instinct dans le forum C++
    Réponses: 6
    Dernier message: 11/12/2006, 11h37
  5. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo