Programmation c

sabrina -  
blurk Messages postés 493 Date d'inscription   Statut Membre -
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

  1. chatbotté
     
    é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;
    }
    0
  2. sabrina
     
    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 @+
    0
    1. chatbotté
       
      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 ?
      0
  3. blurk Messages postés 493 Date d'inscription   Statut Membre 160
     
    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
    ¤
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. sabrina
     
    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
    0
  6. blurk Messages postés 493 Date d'inscription   Statut Membre 160
     
    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

    ¤
    0