Problème copie de tableau en C

Giahuefr -  
shuya89 Messages postés 483 Statut Membre -
Bonjour,

dans le cadre d'un projet, j'ai créer une sous fonction, dans cet sous fonction, je déclare un tableau, et je copie un autre tableau dans celui ci, je n'ai pas utilisé la fonction memcpy, j'ai utilisé ceci

void lcd_bitmap(char table[]);
{
for(j=0; j<(sizeof(logo1)); j++) table[j] = logo1[j];

mon problème, c'est que les 10 premier octets copié sont erroné, les 1014 restant sont quand a eux, bien copié.

Merci d'avance pour vos réponses

3 réponses

  1. shuya89 Messages postés 483 Statut Membre 39
     
    ba ton code a l'air bon pourtant mais quel tableau tu souhaite copie dans l'autre
    0
    1. Giahuefr
       
      je souhaite copié logo1 dans table, pour après exploiter table. en fait, j'affiche le tout sur un lcd graphique, et je vois très bien que les 10 premiers octets ne sont pas bon, alors qu'en exploitant directement logo1, tout s'affiche normalement
      0
  2. Giahuefr
     
    désolé de faire un double-post, mais je ne trouve pas la fonction éditer, et je me suis trompé, veuillez lire

    void lcd_bitmap();
    {
    char table[]
    for(j=0; j<(sizeof(logo1)); j++) table[j] = logo1[j];

    encore désolé
    0
    1. shuya89 Messages postés 483 Statut Membre 39
       
      void lcd_bitmap();
      {

      char table[] ; // il te manque un point virgule la
      for(j=0; j<(sizeof(logo1)); j++)
      {
      table[j] = logo1[j];
      }
      }

      fais voir ton appel de fonction et comment tu créer ton tableaux logo et comment tu le remplit aussi
      0
      1. Giahuefr > shuya89 Messages postés 483 Statut Membre
         
        voila donc ce que j'utilise pour afficher le logo, désolé du pavé, mais je ne suis pas vraiment doué en C, je fait avec ce que je sait faire^^

        //ce que je tape dans le main

        lcd_bitmap(1,50,5);


        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        // Affichage d'un logo
        // num: selection du logo
        // x: position de depart du logo en partant du point en bas a gauche de l'image
        // y: position de depart du logo en partant du point en bas a gauche de l'image
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        void lcd_bitmap(char num, char xs, char ys)
        {
        unsigned int i, j, x, y, longueur, largeur, k=0;

        x = xs;
        y = ys;
        switch(num)
        {
        case 1:
        for(j=0; j<(sizeof(logo1)); j++) table[j] = logo1[j];
        longueur = 128;
        largeur = 8;
        break;
        case 2:
        for(j=0; j<(sizeof(logo2)); j++) table[j] = logo2[j];
        longueur = 128;
        largeur = 8;
        break;
        case 3:
        for(j=0; j<(sizeof(logo3)); j++) table[j] = logo3[j];
        longueur = 128;
        largeur = 8;
        break;
        case 4:
        for(j=0; j<(sizeof(logo4)); j++) table[j] = logo4[j];
        longueur = 96;
        largeur = 5;
        break;
        case 5:
        for(j=0; j<(sizeof(logo5)); j++) table[j] = logo5[j];
        longueur = 240;
        largeur = 16;
        break;
        }
        for(k=0; k<(largeur); k++)
        {
        for(i=0; i<longueur; i++)
        {
        if((table[i+k*longueur] & (0b00000001)) == 0b00000001)Lcd_Allume_pixel(x, 127-(y*8));
        if((table[i+k*longueur] & (0b00000010)) == 0b00000010)Lcd_Allume_pixel(x, 126-(y*8));
        if((table[i+k*longueur] & (0b00000100)) == 0b00000100)Lcd_Allume_pixel(x, 125-(y*8));
        if((table[i+k*longueur] & (0b00001000)) == 0b00001000)Lcd_Allume_pixel(x, 124-(y*8));
        if((table[i+k*longueur] & (0b00010000)) == 0b00010000)Lcd_Allume_pixel(x, 123-(y*8));
        if((table[i+k*longueur] & (0b00100000)) == 0b00100000)Lcd_Allume_pixel(x, 122-(y*8));
        if((table[i+k*longueur] & (0b01000000)) == 0b01000000)Lcd_Allume_pixel(x, 121-(y*8));
        if((table[i+k*longueur] & (0b10000000)) == 0b10000000)Lcd_Allume_pixel(x, 120-(y*8));
        x++;
        if(x>=(longueur+xs))x=xs;
        }
        y++;
        if(y>=(largeur + ys)) y=ys;
        }




        }
        0
  3. shuya89 Messages postés 483 Statut Membre 39
     
    a la place du switch met un for c'est beaucoup mieux essaye
    0