Programmation c [Fermé]

Signaler
-
blurk
Messages postés
488
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
15 mars 2009
-
bonjour
je debute en langage c et je ne vois pas porquoi ma fonction ne marche pas je ne sais pas comment retourner une chaine de caracteres

char* bmtoa(void){
char *ptrch;
char chaine[100000];
ptrch= &chaine;
char trait='-';
char diese='#';
char saut='\n';
int i,j;
for(i=0;i<WIDTH;i++)
for(j=0;j<HEIGHT;j++){
switch(get_bit(i,j)){
case 0:sprintf(chaine,"%s%c",chaine,trait);break;
case 1:sprintf(chaine,"%s%c",chaine,diese);break;
default:"erreur bmtoa";break;
}
}
sprintf(chaine,"%s%c",chaine,saut);

return ptrch;
}

merci de votre aide

6 réponses

écrit en 30 secondes car mon boss est dans les parages

@+


char* bmtoa(void) {
int taille = 100000;
char *chaine = (char*)malloc(taille*sizeof(char));
sprintf(chaine,"\0");

char trait='-';
char diese='#';
char saut='\n';
int i,j;
for(i=0;i<WIDTH;i++)
for(j=0;j<HEIGHT;j++){
switch(get_bit(i,j)){
case 0:
sprintf(chaine+i, "%c\0", trait);
break;
case 1:
sprintf(chaine+i, "%c\0", diese);
break;
default:
sprintf(chaine, "erreur bmtoa a la position i=%d%c\0", i, saut);
return chaine;
}
}
sprintf(chaine+i, "%c\n\0", saut);
return chaine;
}
merci bcp c'est la premiere fois que je vois malloc vu que je n'en suis qu'au 3eme cours lol
j'aimerai comprendre pkoi chaine +i et non pas chaine tout seul
merci @+
Salut Sabrina



s[i] = 'a'; // on met (a' à la i ème place

s+i // adresse mémoire de la i ème place

s[i] // valeur à la i ème place
(équivalent à *(s+i) )

est-ce clair ?
Messages postés
488
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
15 mars 2009
156
ben parce que , c'est pareil que
chaine[i]=saut;

avec
char chaine[100000]; // (ça marche beaucoup moins bien)

sauf que chatbotté a quelques cours d'avance ;-)
cordialement
¤
merci bcp de votre aide
derniere question
qd j'affiche la chaine avec printf avec la methode de chaine+i
rien ne s'affiche
tandis qu'avec la premiere meth j'ai 1 affichage:
a quoi c dû
merci
Messages postés
488
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
15 mars 2009
156
printf("%s",chaine);         // affiche la chaine depuis son  début
printf("%s",chaine+i);     // affiche la chaine à partir du (i)ème caractere
printf("%s", &chaine[i]); //idem

( avec un & parce que printf veut une adresse et rien d'autre)
Seulement, en sortie de boucle, i est égal à la longueur de la chaine, et arrivé au bout de cette chaine, il n'y a plus rien à afficher

¤