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

C++ Discussion :

De int et long vers char*


Sujet :

C++

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Citation Envoyé par Fiquet
    Je t'ai déjà expliqué avant. Lis ça (particulièrement la deuxième partie) : http://c.developpez.com/faq/cpp/?pag...TRINGS_to_char

    Oui ok d'accord, moi je me suis inspirer de la 1ère partie.
    Donc en regardant la seconde ca devrait marcher et me donner çà :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #include <iostream>
    #include <sstream>
    #include <cstdlib>
    #include <string>
     
    #include "post.h"
     
    using namespace std;
     
    int post_name(char* site, char* dossier);
    int post_solde(char* site, char* dossier, char* carte, char* pm);
     
    int main(void)
    {
    	int num_site, num_pm;
    	long num_dossier, num_carte;
    	string num_site_str, num_dossier_str, num_carte_str, num_pm_str;
    	std::ostringstream oss1, oss2, oss3, oss4;
    	std::string num_site_str2, num_dossier_str2, num_carte_str2, num_pm_str2;
    	size_t size_site, size_dossier, size_carte, size_pm;
    	char *num_site_ch, *num_dossier_ch, *num_carte_ch, *num_pm_ch;
     
    	//entiers :
    	num_site=3655;
    	num_dossier=23543;
    	num_carte=56;
    	num_pm=5;  
     
    	//débuts de chaine avant concaténation :
    	num_site_str    = "SitNum=";
    	num_dossier_str = "Inddos=";
    	num_carte_str   = "CarNum=";
    	num_pm_str      = "MonNum=";	
     
    	// Convertie les entiers en string :
    	oss1 << num_site;
    	oss2 << num_dossier;
    	oss3 << num_carte;
    	oss4 << num_pm;
    	num_dossier_str2 = oss2.str();
    	num_site_str2    = oss1.str();
    	num_carte_str2   = oss3.str();
    	num_pm_str2      = oss4.str();
     
    	//concaténation des 2 string :
    	num_site_str    += num_site_str2;
    	num_dossier_str += num_dossier_str2;
    	num_carte_str   += num_carte_str2;
    	num_pm_str      += num_pm_str2;
     
    	//conversion des string vers les char*:
    	size_site    = num_site_str.size() + 1;
    	size_dossier = num_dossier_str.size() + 1;
    	size_carte   = num_carte_str.size() + 1;
    	size_pm      = num_pm_str.size() + 1;	
    	num_site_ch    = new char[ size_site ];
    	num_dossier_ch = new char[ size_dossier ];
    	num_carte_ch   = new char[ size_carte ];
    	num_pm_ch      = new char[ size_pm ];
    	strncpy( num_site_ch    , num_site_str.c_str()    , size_site );    
    	strncpy( num_dossier_ch , num_dossier_str.c_str() , size_dossier );    
    	strncpy( num_carte_ch   , num_carte_str.c_str()   , size_carte );    
    	strncpy( num_pm_ch      , num_pm_str.c_str()      , size_pm );
     
    	//appel des fonctions POST NAME et POST SOLDE
    	post_name(num_site_ch, num_dossier_ch);
    	post_solde(num_site_ch, num_dossier_ch, num_carte_ch, num_pm_ch);
     
            // désallocation :
    	delete [] num_site_ch;
    	delete [] num_dossier_ch;
    	delete [] num_carte_ch;
    	delete [] num_pm_ch;
     
    	return 0;
    }

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Bon alors me voilà devant un second problème. J'ai réaliser 2 examples grace a votre aide, 1 en C et l'autre en C++., mais je dois maitenant porter ces programmes sur une plate forme embarqué à base d'ARM7.

    Le programme en C y fonctionne correctement, le programme en C++ lui compile bien mais plante quand je le lance sur cette platform. En fait il fait rien il reste bloquer sans rien afficher.

    Auriez vous une idée dans mon code C++ (celui du message précédent) de ce qui purrait ne pas être portable. Pour info j'utilise un compilateur croisé arm-elf-g++ qui est lié à la uClibc-0.9.19w.

  3. #23
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Tu as un moyen de savoir où il plante sur ta plateforme ?

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Citation Envoyé par Miles
    Tu as un moyen de savoir où il plante sur ta plateforme ?

    Non pas de débugger, alors j'ai mis des cout << "toto" << endl; un peu partout pour voir.

    Résultat il plante juste au niveau d el'appel de mes fonctions post.

    Mais c'est bizarre car mes fonctions post fonctionne très bien quand je les appel depuis le prog écrit en C. Et le code des fonctions post est strictement identique.

  5. #25
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Et c'est quoi comme type de plantage ? Tu n'as aucun warning à la compilation ?

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Non pas d'erreur à la compilation.

    J'ai ajouter des printf au début de ma fonction post pour vérifier que les paramètres y sont bien passés. Et c'est bon, ca print correctement.

    Maintenant ma platform m'indique Buserror, mais c'est des messages bien spécifique à ma platform et qui ne sont pas parlant, et j'ai pas de listing d'eeur pour savoir ce que cette erreur signifie. Mais par expérience c'est en général un segmentation fault.

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Alors voilà ou j'en suis :

    J'ai fait un fichier post.c dans lequel se trouve la solution en C du code dont nous avons discuté ci dessus et le code de la fonction qui fait le post (récupéré sur internet et fonctionne bien).


    Ce fichier contient donc 4 fonctions :
    - pre_post : fonction qui me permet de convertir mes entiers en char*, puis fais appel aux 2 fonctions de post ("post_name"et "post_solde")
    - post_name : fonction qui envoie à la fonction "post" les paramètres nécessaire pour faire un post qui récupère un nom
    - post_solde : fonction qui envoie à la fonction post les paramètres nécessaire pour faire un post qui récupère un solde
    - post : fonction qui fait le post (+ plusieurs sous fonctions)

    Les fonctions pre_post, post_name et post_solde, sont celle que j'ai réalisé moi même, et la fonction post provient d'internet j'ai just changé son nom qui était bien évidement main.

    Ce fichier est appellé depuis mon application c++, par la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pre_post(num_site, num_dossier, num_carte, num_pm);

    L'organigramme du tout :
    Mon prog C++
    | fonction "pre_post"
    | | fonction "post_name"
    | | | fonction "post" et sous fonction
    | | fonction "post_solde"
    | | | fonction "post" et sous fonction
    | |
    |

    Mon fichier à télécharger : post.c


    Le problème :

    Le fichier fonctionne très bien lorsqu'il est appellé par simple programme comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int main(void)
    {
    	int num_site, num_pm;
    	long num_dossier, num_carte;
     
    	num_site=22;
    	num_dossier=75835486;   
    	num_carte=5369;
    	num_pm=18;
     
    	pre_post(num_site, num_dossier, num_carte, num_pm);
     
    	return 0;
    }
    Mais il ne fonctionne pas lorsque je l'appel depuis mon code en C++. Pourtant le code en C++ seul, c'est à dire sans la ligne qui fait appel à la fonction pre_post, fonctionne lui très bien aussi. Le seul moment ou ca ne marche pas c'est quand je lie les 2 codes gràce a la ligne "pre_post(num_site, num_dossier, num_carte, num_pm);".

    Auriez vous une idée de ce qui pourrais faire planter le programme. Sachant que ca plante au niveau de l'appel de la fonction posturlbyparts.
    J'ai l'impression que le prrogramme rale lorsque je passe mes arguments "num_site, num_dossier, num_carte, num_pm" d'une fonction à l'autre.

  8. #28
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Par défaut
    T'inkiet pas sur le sprintf moi je m'en sert sur visual 6 C++ et ca marche nikel.
    En plus je suis pas un dingue de l'info alors je pense que mes codes sont brouillons et ca a jamais planté. Ca marche nikel le SPRINTF.
    Tu verras essaye.

Discussions similaires

  1. [DEBUTANT]Convertion int vers Char*
    Par magnus2005 dans le forum Débuter
    Réponses: 13
    Dernier message: 01/04/2007, 11h15
  2. [question] cast de long vers int
    Par Faiche dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2006, 10h22
  3. Réponses: 2
    Dernier message: 24/03/2006, 10h46
  4. LONG RAW vers CHAR
    Par morti dans le forum Oracle
    Réponses: 8
    Dernier message: 31/12/2005, 14h21
  5. Réponses: 1
    Dernier message: 20/12/2005, 17h51

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