Help pour un probleme de pointeurs en C - Programmation
Marsh Posté le 15-02-2002 à 08:57:56
après ton malloc pour "ch", essaye de faire un
Code :
|
Marsh Posté le 15-02-2002 à 09:00:34
j'ai pas tout lu mais il faut toujours allouer une place en + pour le \0.
Marsh Posté le 15-02-2002 à 10:00:15
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
Marsh Posté le 15-02-2002 à 10:18:39
ben le memset de El_gringo remplit la chaine avec des \0.
Marsh Posté le 15-02-2002 à 10:24:01
j'avais pas vu
Marsh Posté le 15-02-2002 à 10:29:11
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]
Marsh Posté le 15-02-2002 à 10:48:17
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:
(honteusement pompé dans http://www.ltam.lu/Tutoriel_Ansi_C/ )
A+,
Marsh Posté le 18-02-2002 à 05:17:52
Salut a tous!
Je tenais a vous remercier pour l'aide apportee
Et plus particulierement Godbout
Qui m'a apporte la solution le premier:
terminer la chaine par "\0".
Encore merci!
charcutrix
Marsh Posté le 15-02-2002 à 08:36:17
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!