Probleme strcat et itoa :(

Résolu
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008 - 14 mars 2007 à 11:14
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008 - 15 mars 2007 à 11:16
Bonjour a tous,
voila je débute en C et j'ai quelques problemes avec la fonction itoa,
je vous explique vite fait : je souhaite charger des images les unes apres les autres et leur faire un traitement, pour cela j'utilise la boucle "for".
Voici mon code, vous comprendrez mieux :

for (i=1; i<=15; i++)
    {
    itoa(i, car, 10);
    
    image = strcat("image", car);
    total = strcat(image, ".jpg");

    imageDeFond = IMG_Load(total); 
    
    SDL_BlitSurface(imageDeFond, NULL, ecran, &amp;positionFond);

//--------------- Chargement et blittage de reproduc_interdites sur la scène ----------
    reproduc_interdites = IMG_Load("reproduc_interdites.bmp");
    
//--------------- On rend la couleur (255,255,255) transparente -----------------------
    SDL_SetColorKey(reproduc_interdites, SDL_SRCCOLORKEY, SDL_MapRGB(reproduc_interdites->format, 255, 255, 255));

//--------------- Transparence Alpha moyenne (128) ------------------------------------
    SDL_SetAlpha(reproduc_interdites, SDL_SRCALPHA, 150);
    SDL_BlitSurface(reproduc_interdites, NULL, ecran, &amp;positionTransparence);

//--------------- On refresh le tout --------------------------------------------------    
    SDL_Flip(ecran);
    
    resultat = strcat("z", total);

//------------------ Enregistrement de l'image ----------------------------------------
    SDL_SaveBMP (ecran, resultat);
    
}

A voir également:

10 réponses

cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011
15 mars 2007 à 09:48
   

int i;
char total[16];



for(i=1; i<=15; i++)
{
  sprintf(total, "image%02d.jpg", i);    
  imageDeFond = IMG_Load(total);



  ...
}
3
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
14 mars 2007 à 11:16
oups, jai fais une mauvaise manip dsl...
Il n'y a pas d'onglet pour insérer du code ?

En tout cas Merci d'avance a tous...
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
14 mars 2007 à 11:36
Salut,
image = strcat("image", car);

resultat = strcat("z", total);

Attention: Le premier paramère de strcat() doit être un buffer ayant suffisamment de place pour contenir les caractères à ajouter avec le 0 final.

Dans ton code, on ne voit pas la déclaration de image et de car. Ca nous permettra de voir s'ils sont correctement déclarés.
0
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
14 mars 2007 à 13:43
Re bonjour, voici mon code au complet si ca peut vous aider, un buffer est un tableau c'est ca ?

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <time.h>
#include <SDL/SDL_TTF.h>

int main(int argc, char *argv[])
{    SDL_Surface *ecran NULL, *imageDeFond NULL, *reproduc_interdites = NULL;
    SDL_Rect positionFond, positionTransparence;

    positionFond.x = 0;
    positionFond.y = 0;
    positionTransparence.x = 10;
    positionTransparence.y = 425;

    SDL_Init(SDL_INIT_VIDEO);

    ecran = SDL_SetVideoMode(330, 480, 32, SDL_HWSURFACE);
    SDL_WM_SetCaption("Chargement d'images en SDL", NULL);

    int i = 1;
    char car[3];
    char image[12];
    char total[12];
    char resultat[12];

    for (i=1; i<=15; i++)
    {
   
    itoa(i, car, 10);
   
    image = strcat("image", car);
    total = strcat(image, ".jpg");

    imageDeFond = IMG_Load(total);
   
    SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);

//--------------- Chargement et blittage de reproduc_interdites sur la scène ----------
    reproduc_interdites = IMG_Load("reproduc_interdites.bmp");
   
//--------------- On rend la couleur (255,255,255) transparente -----------------------
  SDL_SetColorKey(reproduc_interdites, SDL_SRCCOLORKEY,  
  SDL_MapRGB(reproduc_interdites->format, 255, 255, 255));

//--------------- Transparence Alpha moyenne (128) ------------------------------------
    SDL_SetAlpha(reproduc_interdites, SDL_SRCALPHA, 150);
    SDL_BlitSurface(reproduc_interdites, NULL, ecran, &positionTransparence);

//--------------- On refresh le tout --------------------------------------------------   
    SDL_Flip(ecran);

    resultat = strcat("z", total);

//------------------ Enregistrement de l'image ----------------------------------------
    SDL_SaveBMP (ecran, resultat); 
}
   

//------------------ Pression de touche pour continuer ---------------------------------
    system("PAUSE");
      
    SDL_FreeSurface(imageDeFond);
    SDL_FreeSurface(reproduc_interdites);
    SDL_Quit();

    return EXIT_SUCCESS;
}

Merci bien...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
14 mars 2007 à 15:01
L'erreur renvoyée est : "incompatible types in assignment of `char*' to `char[12]' "
je vois pas trop en fait ...
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
14 mars 2007 à 18:07
Oui ici le buffer est un tableau de char. Il faudra enlever les guillemets dans le premier appel de strcat():
    image = strcat(image, car);

Attention: resultat = strcat("z", total); on ne peut pas donner comme premier paramètre une chaine écrite directement. Il faut utiliser un buffer comme expliqué dans mon message précédent.
0
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
15 mars 2007 à 08:00
Je te remercie, je vais tester et vous tiens au courant...
Merci ^^
++
0
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
15 mars 2007 à 09:07
Re,
Jai mis ca :

    char car[3];
    char image[12];
    char total[12];
    char resultat[12];
    char lettreZ[] = "z";

    char image2[] = "image";

    itoa(i, car, 10);
   
    image = strcat(image2, car);
    total = strcat(image, ".jpg");

                ( ... )

    resultat = strcat(lettreZ, total);

 et ca me donne toujours la meme erreur sur les 3 lignes en rouge...
  Merci bien.

ps : dsl de mon incompétence, mais je débute...
0
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
15 mars 2007 à 10:22
ahh ! merci bien, ca fonctionne , quoi ... ce que tu ma donné fonctionne, mon logiciel non..mdr, ca me charge et m'enregistre les images, mais les images sont noires, il n'apparait que la seconde image "reproduct_interdites" et non la 1ere..
mais bon je vais essayer de voir..
en tout cas merci !
0
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
15 mars 2007 à 11:16
c'est bon ca fonctionne, je ne comprenais pas a quoi servait le 02 ci-dessous :
sprintf(total, "image%02d.jpg", i);

du coup je l'ai enlevé, et cela fonctionne tres bien.

merci a tous
++
0
Rejoignez-nous