Programmation c

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. é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
    1. 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. 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
    2. 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
      1. 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
        1. 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