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.
PS: j'ai essaye d'expliquer un peu mon code mais ce n'est pas brillant, n'hesitez pas a me demander des explications!