IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[Visual Studio 2003] - Problème avec les integers...


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut [Visual Studio 2003] - Problème avec les integers...
    J'ai un problème très gênant dans mon programme et j'ai l'impression qu'il s'agit d'un bug de visual studio, mais je peux me tromper...

    Voila, je fait un jeu vidéo en C++ et a chaque frame (passage dans la boucle principal) les integers d'une de mes classes (peut-etre de toutes les classes?) prennent "707406379" comme valeur !
    Meme s'ils sont réinitialisés a "0", ils prennent cette valeure.
    Je ne comprend vraiment pas pourquoi le compilateur fait ca et c'est un très gros problème vu que je dois garder certaines valeurs entre 2 frames.

    Merci de votre future aide.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Voici trois causes possibles:

    - Mauvaise utilisation de pointeurs
    - Accès hors des limites d'un vecteur
    - Compilation avec alignement à 4 tandis que la/les dll externe (opengl.dll par exemple) sont compilées avec un alignement à 8.

    Peux-tu éventuellement envoyer la structure de ta classe ainsi qu'un extrait de la boucle principale, il y a peut-être une écriture qui écrase systématiquement tes objets.

    Mais je ne pense pas que c'est du au compilateur.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    Merci pour la réponse, le problème c'est que j'ai pas internet sur le pc ou je développe en ce moment.


    Mais dès que j'ai internet je metterai le code.
    Mon problème viens peut-être d'une mauvaise utilisation des pointeurs, car je n'ai pas l'habitude de la manipuler en C++, voici comment je créer un objet d'une classe et comment j'utilise ses fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Création
    MaClasse* p_MonObjet= new Maclasse();
    //Utilisation des méthodes publiques
    p_MonObjet->MaFonction();
    je suis habitué au C# et j'ai un peu du mal avec le C++ sur certains points : gestion des pointeurs, des différents types de variables...

    Pour ce qui est de la compilation avec alignement 4 ou 8, je ne sais pas du tout de quoi tu veux parler mais en tout cas je ne programme pas en opengl, en fait j'utilise un SDK payant : le DarkSDK qui permet d'utiliser les fonctions de DarkBasic Pro (je sais pas si vous connaissez) en C++.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    Je ne connais pas DarkSDK et DarkBasic Pro

    Je ne peux pas dire si la suite de mon message est liée à ton problème
    mais voici une petite remaque par rapport au C++ et au C#

    En C#, la mémoire est gérée par le compilateur, tu alloues de la mémoire
    et c'est le compilateur qui la libère pour toi

    Par contre en C++, c'est le développeur qui est responsable de la mémoire donc quand tu alloues de la mémoire, c'est toi qui dois la libérer

    Je ne connais pas tes codes mais si tu utilises la création de ta classe dans une boucle, il faut penser à la libérer

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
    while(boContinuer)
    {
       //Création 
       MaClasse* p_MonObjet= new Maclasse(); 
       //Utilisation des méthodes publiques 
       p_MonObjet->MaFonction(); 
     
       delete p_MonObjet; // Libération de la mémoire
       ...
    }
    Si tu ne libères pas toi même la mémoire, tu peux saturer la mémoire et risquer d'avoir ce genre de problème.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    DarkBasic pro et un logiciel de programmation orienté jeu vidéo : c'est du basic comportant plusieurs fonctions accès graphique. Il est très simple d'utilisation et assez performant mais limiter vu que c'est du basic...
    C'est pour ca que j'ai acheter le SDK .

    Pour ce qui est de la création d'objet de classe, je ne créer mes objets qu'une fois hors de la boucle principale. Je connaissais la fonction delete mais je ne savais pas que c'était si essentiel.

    Sinon, toujours pas trouver de solution a mon problème, je vous fournirai un bout de code demain si je trouve rien.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    Malheureusement, je n'ai pas de solution

    Juste te suggérer de vérifier que tu n'écris pas en dehors d'un vecteur
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int MonVecteur[10]; // Réservation d'un vecteur de 10 entiers
    ...
    MonVecteur[10] = 5; // Ici tu écris dans le 11e éléments qui n'existe pas
    Rappel: En C, le premier élément d'un vecteur commence à l'indice 0 et non à l'indice 1 (comme c'est le cas en basic)

    Ou as-tu dans tes codes une instruction du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int MonVecteur[20]; // => 20 * 4 bytes
    memset(MonVecteur,0,100); // Initialisation à 0 de 100 bytes à partir de l'adresse mémoire correspondant au début de MonVecteur
    A part çà, je ne vois pas la cause de l'erreur.

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par dedesite
    je suis habitué au C# et j'ai un peu du mal avec le C++ sur certains points : gestion des pointeurs, des différents types de variables...
    En complément de la réponse de Madeiras qui ne tient pas compte des exceptions et autres détournements de flots d'exécution, tu as les pointeurs intelligents en C++ (std::auto_ptr<>, en standard, qui a une sémantique très particulière ; et tous les boost:xxxx_ptr<>, non standard)

    Pour les divers types de variables, si tu connais C#, les bases restent identiques. Reste la possibilité de manipuler par valeurs des objects personnels qui est plus accessible qu'en C# de ce que j'en sais.

    Une bonne initialisation de tableau qui ne débordera pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<int> v(100, 42); // 100 éléments initialisés à 42
     
    int t[100] = {0}; // tab statique de 100 éléménts initialisés à 0
    int t[100] = {1, 2}; // tab statique de 100 éléménts initialisés à 0 sauf le premier qui vaudra 1, et le second 2

    Sinon, il y a aussi les pistes des portées mal gérées, idem en C# j'espère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    { 
        int t = 42;
        if (toto) { int t; cout << t; } // affiche n'importe quoi
    }
    Autre piste: données stockée dans un objet qui a été libéré.

    PS: en C#, le compilo ne libère rien. C'est la VM dans laquelle le prog tourne qui se charge de tout. (Elle est certes guidée par le compilo pour savoir quand une référence est perdue ou acquise vers une donnée lors de l'exécution)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    Je sais bien que les vecteur commence a 0 en C++ et mon problème est sur un integer tout ce qu'il y'a de plus simple.
    Donc ca ne peut pas venir des vecteurs mal gérer...
    J'ai pas trop compris les pistes de portés mal gérées mais ca semble être une piste.
    Sinon, je n'ai pas vider la mémoire des mes objets puisque je me sert de l'objet concerné dans ma boucle principal.

    En tout cas merci pour votre aide.

    Sinon, quand vous écrivez
    Cela initialise tous les éléments du tableau a 0?
    Si c'est ca je ne savais pas qu'on pouvais le faire comme ca, j'utilise un for ...
    Est-ce que ca marche aussi pour les char*?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    Pour le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *t[100] = {""};
    Je suppose que çà initialise le tableau de caractère avec les caractères '\0' mais sans garantie, je n'utilise pas cette syntaxe.

    Pour le problème de portée, une variable locale est toujours déclarée dans un bloc et appartient donc au bloc dans lequel elle a été déclarée.
    Lorsque tu utilises une variable, c'est toujours celle dans le bloc où l'exécution se trouve qui est utilisée en prioritée.

    voici un autre exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <iostream.h>
    void main()
    {
       int t = 0;   // Déclaration de la variable t du bloc main
       cout << "Valeur de t = " << t << endl;
       {
          int t = 5; // Déclaration de la variable t du bloc anonyme
          cout << "Valeur de t = " << t << endl;
       }
       cout << "Valeur de t = " << t << endl;
    }
    A l'affichage tu auras:
    Valeur de t = 0
    Valeur de t = 5
    Valeur de t = 0

    Maintenant, pour en revenir à ton programme, as-tu écrit quelquechose de ce style mais au lieu de variable int t, c'est tes objets CMaClasse *p_MaClasse ?

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par dedesite
    Sinon, quand vous écrivez
    a- Cela initialise tous les éléments du tableau a 0?
    b- Si c'est ca je ne savais pas qu'on pouvais le faire comme ca, j'utilise un for ...
    c- Est-ce que ca marche aussi pour les char*?
    a- oui

    b- les vecteurs, c'est encore plus simple (si tant est que les éléments devront avoir la même valeur)

    c- Non.
    Là, tu initialises le pointeur t[0] pour qu'il pointe vers le littéral constant '\0'
    Et les T[i ; i>0] vaudront 0 (ou NULL si cela te parle plus). Soit des pointeurs dont la valeur sera nulle et qui ne pointeront donc vers rien, même pas le littéral constant '\0'.

    En c++ (voir b-):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::string> v(100);
    définira sûrement et simplement un vecteur de 100 chaines vides.

    PS:
    :%s/iostream.h/iostream/ <-- à moins d'utiliser VC6 et d'utiliser CString avec cin, et autres vieux codes toujours à maintenir
    :%s/void main/int main/ <-- toujours
    !!
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    as-tu écrit quelquechose de ce style mais au lieu de variable int t, c'est tes objets CMaClasse *p_MaClasse ?
    Je vois bien ce que tu veux dire mais je ne crois pas avoir fait cela, dès que je suis chez moi je regarderai attentivement mon code mais normalement mon problème ne vien pas de la.



    std::vector<std::string> v(100);
    Ok pour un vecteur de string mais pour un vecteur de char*, on fait comment?

    Comme ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<char*> v(100);

  12. #12
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ouais. Mais ce n'est pas forcément conseillé.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  13. #13
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tant qu'à passer avec la STL, autant la prendre dans son ensemble !
    Il faut que tu fasses attention, tu as l'air de croire que tu peux jouer avec les chaînes de caractères comme tu veux, mais tu les gères comme des string et non comme des char *. Un char * est un pointeur, il te faut allouer la mémoire vers lequel il pointe.

    Regarde aussi si tu n'as pas des unsigned int que tu décrémenterais quelque part.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    Bon j'ai vraiment passer du temps sur mon code a essayer de comprendre pourquoi mes integers prennais ces valeurs bizarre...
    Et j'ai découvert que si je n'appelai pas certaines fonctions dans mon code, mes integers gardaient les bonnes valeurs.
    Voila qui est bizarre, surtout que ces fonctions n'utilisent pas du tout les integers en question mais font simplement partie de la même classe.
    J'ai aussi constaté que ca me faisait cela que dans la même classe.
    Classe où j'utilise des fonction de convertion (String->char...) qui ne sont pas utilisée par les autres classes...
    Etant donné que j'ai crée ces fonction à partir de la FAQ sur VC++ de developpez.com, je m'était dis que c'était bon, mais comme dis Miles, j'utilise les chaines de caractère comme des strings car en C# j'avais l'habitude de manipuler les string et non les char* et qu'en DarkBasic la manipulation des données est encore plus libre...

    Donc voici l'ensemble des fonctions de convertions que j'ai créer avec a la fin un petit exemple de leur utilisation afin que vous me disiez s'il y'a un problème ou non.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    template<typename T>
    string Multi::ToString(const T & Value)
    {
    	//Utiliser un flux de sortie pour créer la chaine
    	ostringstream oss;
    	//écriture de la valeur dans le flux
    	oss<<Value;
    	//Renvoi de la string
    	return oss.str();
    }
     
     
     
    char* Multi::StrToChar(string strChaine)
    {
    	//Créer le buffer pour copier la chaine
    	size_t size=strChaine.size()+1;
    	char* buffer = new char[size];
    	//Copier la chaine
    	strncpy (buffer, strChaine.c_str(), size);
    	//on retourne la chaine
    	return (buffer);
    }
     
     
    //Celle-la ne marche pas, je ne l'utilise donc pas...
    template<typename T>
    bool Multi::FromString (string & Str, T & Dest)
    {
    	///clr:InitialAppDomain;
    	//Creer un flux à partir de la chaine donnée
    	istringstream iss(Str);
    	//Tenter la conversion vers Dest
    	return iss >> Dest != 0;
    }

    exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //les noms de fonction avec db en prefixe sont les fonction du darkSDK
    //ici elles ne renvoient que des char, je suis donc obliger de la convertir
    //en string afin d'effectuer un concaténation puis de les reconvertir  en
    //char car la fonction dbText (qui affiche un text a l'ecran au pixels passer
    //en paramètre) ne fonctionne qu'avec des char* 	
    sprintf (czVariable, StrToChar(ToString(dbGetDate$()) + "  |  " +ToString(dbGetTime$())));
    dbText ( 30 , 130 , czVariable );
    Voila, il y'a sûrement de l'abus dans mon utilisation des chaine de caractère, mais comme les fonction du DarkSDK n'utilise presque que des char* (et non des strings) je suis obliger d'avoir recour a ces fonctions de convertion. Si quelqu'un a une autre idée qu'il me la fasse parvenir .

    Sinon, j'aimerai faire un DLL de ces fonctions donc si elles sont fausses ou incomplète dites-le moi SVP.

    Merci beaucoup pour votre aide et votre attention, ce forum est vraiment excellent

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    A chaque fois que tu vas appeler StrToChar sans récupérer le retour pour le détruire convenablement, tu vas avoir une fuite mémoire. Tu n'as pas besoin de créer une copie de ta chaîne, utilise simplement la fonction string::c_str() qui renvoie un const char*. A moins bien sûr que tes fonctions aient réellement besoin d'un buffer de char modifiable, mais ça n'a pas l'air d'être le cas.

    A part ça, je ne vois effectivement aucun rapport avec ton problème initial.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    C'est vrai que je ne supprimme pas le buffer... Alors que l'exemple de la FAQ le fesait...
    En réalité je ne comprenais pas l'utilité de ce code et comme tu dis loulou24, je ne me sert pas du buffer, je vais donc utiliser la fonction c_str()...
    Je vous fait signe si ca marche

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    Bon, après une petite sécance débugage, je sais ce qui fait prendre a mes integeter ces valeurs louches : la fonction SPRINTF!!
    Et oui, je me demande encore pourquoi car je l'utilise dans d'autre classe et il n'y a aucun problème avec les integer.

    Alors voici un exemple de code qui a lui seul fait planter la gestion des integers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(czVariable, "Vous êtes dans le salon : %s", czNomSalon);
    La fonction sprintf marche bien, mais mes integers bug. Alors je me suis dis que ca pouvait peut-être venir d'un conflit de libraire vu que j'en utilise plus dans cette classe, voici tous mes includes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <complex>
    #include <stdio.h>
    #include <string>
    #include <iostream>
    #include <sstream>
    using namespace std
    Puis une autre piste encore, dans les autres classe je n'utilise sprintf qu'avec des flaot ou des entier et non avec des char*, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(czVariable, "Vitesse : %G", fltVitesse);
    Sinon, l'utilisation de la fonction c_str() n'a rien changer Loulou24.

    Encore merci pour votre aide.

  18. #18
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Y'a pas de raison que ça fasse planter les entiers ton code...
    Et à la place de sprintf, tu peux utiliser les streams et l'opérateur habituel <<.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    Peut-tu me donner un exemple d'utilisation des stream STP?

  20. #20
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(czVariable, "Vous êtes dans le salon : %s", czNomSalon);
    Si ceci "détruit" les entiers, il y a de fortes chances que czVariable soit insuffisamment dimensionnée pour contenir la chaîne totale
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. [Débutant] problème avec les form visual studio
    Par Invité dans le forum VB.NET
    Réponses: 1
    Dernier message: 23/05/2012, 12h06
  2. [RegExp] Petit problème avec les integers
    Par Rhend dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 10/10/2011, 19h19
  3. Réponses: 1
    Dernier message: 23/09/2009, 14h05
  4. Réponses: 16
    Dernier message: 24/10/2008, 17h32
  5. Réponses: 8
    Dernier message: 13/03/2006, 22h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo