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++Builder Discussion :

perdre une partie de donnee avec la conversion


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 105
    Par défaut perdre une partie de donnee avec la conversion
    bjour , j'ai converti une variable string en char*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arr=Table1->FieldByName("Nomm")->AsString.c_str() ;
    puis j'ai converti arr en String pour afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString txt = VarToStr(arr);
    alors quand j'ai afficher :
    il m'afficher une partie de la variable initiale de champ nomm de la table 1
    exp : 17.10.1.22 => 17.10.1
    je cherche pourquoi ????
    merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Moi je ferais comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      char *arr;  // pour mémoire
      strcpy(arr,Table1->FieldByName("Nomm")->AsString.c_str() );
      AnsiString txt = AnsiString(arr);
      ShowMessage(txt);
    Je crois que la raison est le nombre de caractères alloués par défaut à un char*, mais sans garantie.
    De toute façon arr est un pointeur. Si vous écrivez arr=un autre pointeur, ce que renvoie c_str(), vous écrivez qu'un pointeur est égal à un autre, mais pas du tout une copie de chaine. Il est bien probable que cette ligne qui donne un résultat donne dans le cas général une énorme erreur.
    Essayez par exemple printf("%s\n",arr); je suis sûr que ça plante.
    Le AnsiString met une fin de chaine (sans vous demander votre avis), donc ça plante pas, mais c'est faux.

  3. #3
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Salut,
    j'ai une question qui est peut être con, mais la propriété AsString renvoie un AnsiString, alors pourquoi le convertir en char* pour le reconvertir en AnsiString juste après ? N'est-ce pas se compliquer la tache pour rien ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Personnellement, je comprend la démarche de Menoran, il cherche à comprendre et fait des essais.
    Il a constaté une réaction qui génère une erreur, il décompose le bout de code jusqu'au plus petit détail.

  5. #5
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Effectivement vu comme cela, ca peut se comprendre

    Mais pourquoi passer par des fonctions C alors que tu fait du C++, as-tu besoin absolument d'un char* ? Est-ce que le std::string de la stl ne peut pas convenir ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    re-bonjour,
    Menoran programme en C++Builder.
    Dans cet environnement, les bibliothèques std:: ne sont pas utilisées par le programmeur.
    Par contre, Borland ne semble pas avoir cru bon de rayer d'un coup de crayon les fonctions de base telles que strcpy, strcat, printf et Cie etc.
    C'est assez inattendu comme expression "passez par des fonctions C alors que tu fais du C++". Moi je vous poserais la question "pourquoi utiliser la sur-couche du C++ alors que pour telle opération les fonctions du C conviennent parfaitement?"

    Il y a eu 2 discussions dernièrement pourtant sur ce type de sujet.
    Cordialement.

Discussions similaires

  1. Comment extraire une partie d'URL avec REGEX?
    Par STB_Fk dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2007, 12h59
  2. Supression d'une base de données avec checkbox
    Par sirine dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 02/12/2006, 09h28
  3. [MFC]Ouverture d'une base de donnee avec DAO
    Par Wyatt dans le forum MFC
    Réponses: 7
    Dernier message: 24/01/2005, 10h06
  4. Exporter seulement une partie des données avec pg_dump ?
    Par Philhz dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 31/07/2004, 09h50
  5. [VB6] [ODBC] Référencer une base de données avec vb
    Par af.balog dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/09/2002, 09h51

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