Probleme strcat et itoa :( [Résolu]

Signaler
Messages postés
74
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
5 décembre 2008
-
Messages postés
74
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
5 décembre 2008
-
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);
    
}

10 réponses

Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
1
   

int i;
char total[16];



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



  ...
}
Messages postés
74
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
5 décembre 2008

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...
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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.
Messages postés
74
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
5 décembre 2008

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...
Messages postés
74
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
5 décembre 2008

L'erreur renvoyée est : "incompatible types in assignment of `char*' to `char[12]' "
je vois pas trop en fait ...
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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.
Messages postés
74
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
5 décembre 2008

Je te remercie, je vais tester et vous tiens au courant...
Merci ^^
++
Messages postés
74
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
5 décembre 2008

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...
Messages postés
74
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
5 décembre 2008

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 !
Messages postés
74
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
5 décembre 2008

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
++