Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3900 connectés 

 


Dernière réponse
Sujet : Help pour un probleme de pointeurs en C
charcutrix Salut a tous!
 
Je tenais a vous remercier pour l'aide apportee
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  
 
Et plus particulierement Godbout  
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  
 
Qui m'a apporte la solution le premier:
terminer la chaine par "\0".
 
Encore merci!
 
charcutrix

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
charcutrix Salut a tous!
 
Je tenais a vous remercier pour l'aide apportee
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  
 
Et plus particulierement Godbout  
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  
 
Qui m'a apporte la solution le premier:
terminer la chaine par "\0".
 
Encore merci!
 
charcutrix
godbout :jap:
 
Eh ben ca c'est de la reponse !! [:fifiz]
gilou Lors de la déclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant la liste des valeurs respectives entre accolades. Il faut évidemment veiller à ce que le nombre de valeurs dans la liste corresponde à la dimension du tableau. Si la liste ne contient pas assez de valeurs pour toutes les composantes, les composantes restantes sont initialisées par zéro.
 
Donc:  
char chaine[255] = {0};  
execute chaine[0] = 0; et met des 0 dans le reste du tableau.
A priori, chaine[255] = {1}; rangera 1 dans la premiere case du tableau chaine (chaine[0]), et mettra des 0 dans les 254 autres.
 
autre exemple plus explicite:
http://www.ltam.lu/Tutoriel_Ansi_C/prg-c21.gif  
http://www.ltam.lu/Tutoriel_Ansi_C/prg-c22.gif  
http://www.ltam.lu/Tutoriel_Ansi_C/prg-c23.gif  
(honteusement pompé dans http://www.ltam.lu/Tutoriel_Ansi_C/ )
A+,
godbout pas de prob ;)
 
Par contre y a une autre facon de remplir une chaine statique et j'aurais bien voulu savoir si c'est standard ou pas (parce qu'apparemment pas bcp de gens connaissent)
 
char chaine[255] = {0};
 
ca remplit chaine[0] jusque chaine[254] de 0 sous Visual C++.

 

[jfdsdjhfuetppo]--Message édité par Godbout--[/jfdsdjhfuetppo]

jupiler j'avais pas vu :jap:
godbout ben le memset de El_gringo remplit la chaine avec des \0.
jupiler

Godbout a écrit a écrit :

j'ai pas tout lu mais il faut toujours allouer une place en + pour le \0.  




 
oui et il faut ajouter le \0 après initialisation

godbout j'ai pas tout lu mais il faut toujours allouer une place en + pour le \0.
El_gringo après ton malloc pour "ch", essaye de faire un  

Code :
  1. memset (ch, 0, sizeof (ch));

charcutrix Bonjour a tous!
 
Je souffre actuellement d'un gros probleme de pointeurs.
Il s'agit d'une chaine de caracteres (que j'appelle ici "ch" ) qui
ne fait jamais vraiment la longueur que je veux.
Elle se met a grandir toute seule!
 
J'aurais grand besoin de votre aide.
 
Le programme sert a traiter tous les fichiers html d'un repertoire,
pour le tester il faut que vous disposiez de plusieurs fichier html dans le repertoire (avec des noms de longueur variable sinon le probleme n'apparait pas toujours).
 
Comme compilateur j'utilise celui qui est integre a Dev-C++ (une variante de gcc). Le Borland 5.5 donne des resultats un peu differents mais la cause du plantage reste la meme.
 
Voila le code compilable:
 
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define BUFSIZE 30
 
int main()
{
      FILE *fp1, *fp2, *fp;
      char buffer1[BUFSIZE], buffer2[BUFSIZE], temp_char, *ch;
      int int1, i, ii, j;
 
      //Recuperation des noms des fichiers html du repertoir courant dans "bobo.txt"
 
      system("DIR *.html /b >> bobo.txt" );
      fp1 = fopen("bobo.txt","r" );
      fgets(buffer1, BUFSIZE, fp1);
 
      //Chacun des fichiers contenus dans le fichier est traite
      //Pour cela il est ouvert puis recopie dans un fichier temporaire
 
      while ( buffer1[1] != EOF)
            {
            printf(buffer1);
            printf("\n" );
 
            i = 0;
            ii = 0;
            int1 = 0;
            int1 = (int)buffer1[i];
 
            //Le nom du fichier est recupere puis place dans la chaine "ch"
 
            while ( int1 != 10 )
                  {
                  buffer2[i] = buffer1[i];
                  i = i + 1;
                  int1 = (int)buffer1[i];
                  }
 
            ii = i;
            printf("Taille de ii: %d \n", ii);
            printf(buffer2);
            ch = (char*) malloc((ii) * sizeof(char));
            printf(ch);
            printf(" \nLongueur reelle de la chaine allouee : %d  \n", strlen(ch));
            printf("Longueur reelle de la chaine fixe : %d \n", strlen(buffer2));
 
            strncpy(ch, buffer2, (ii-1));
 
            printf("Longueur reelle de la chaine initialisee : %d \n", strlen(ch));
 
            //verification du contenu de la chaine
 
            i = 0;
            for (i = 0; i <= (ii-1); i++)
                {
                printf("%c", ch[i]);
                }
 
            //Passage par un fichier temporaire
            //C'est la qu'on voit que ca foire, le nom n'est pas le bon
 
            printf("\nResultat du changement de nom %d \n", rename(ch, "tempo.html" ));
            printf(ch);
            printf(" " );
 
            fp = fopen("tempo.html","r" );
            fp2 = fopen(ch,"w+" );
 
            while ((temp_char = fgetc(fp)) != EOF)
                  {
                  putc(temp_char, fp2);
                  }
 
            //On vide les poubelles... ...on nettoie les buffers
 
            fclose(fp);
            fclose(fp2);
            remove("tempo.html" );
            free(ch);
            fflush(stdin);
            fflush(fp);
            fflush(fp2);
            fgets(buffer1, BUFSIZE, fp1);
 
            system("pause" );
 
            }
 
      return 0;
}
 
Merci d'avance.  :jap:  
 
PS: j'ai essaye d'expliquer un peu mon code mais ce n'est pas brillant, n'hesitez pas a me demander des explications!

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)