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 :

conversion AnsiString en Char*


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 conversion AnsiString en Char*
    bjour , je cherche comment je converti une variable AnsiString en Char* .
    voila mon code et merci d'avance.
    si quelqu'un a une autre astuce voila mon code :
    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
     
    void __fastcall TForm4::RzRapidFireButton3Click(TObject *Sender)
    {
    using namespace std;  int b;   char c1[1000], c2[1000], *tmp1, *tmp2, *dep, *arr;
        int nbr = 0;      char ligne_lue[999];
    FILE * f; FILE * f1;   FILE * f2; FILE * f21;
      dep="TCP.EXCLUDED_NODES=(192.168.0.1)";
      //arr="TCP.EXCLUDED_NODES=(10.1.17.222)";
     
    Table1->First();
    while (!(Table1->Eof))
    {
    Variant arr=Table1->FieldByName("Nomm")->AsString;
    Table1->Next();
     
    }
    AnsiString txt = VarToStr(arr);
    txt="TCP.EXCLUDED_NODES=("+txt+")";
    arr=txt;
    ShowMessage("lire adresse.");
     
    f = fopen ("C://oracle//ora92//network//admin//sqlnet.ora", "r");
    f1 = fopen ("c://tata.txt", "w");
    ShowMessage("ouvrir fichier.");
        while (fgets(c1,999,f))
        {
            strcpy(c2,"");
            tmp1 = c1;
            while(strlen(tmp1))
            {
                tmp2 = strstr(tmp1, dep);
                if (tmp2)
                {
                    strncat(c2, tmp1, tmp2 - tmp1);
                    strcat(c2, arr);
                    tmp1 += ((tmp2 - tmp1) + strlen(dep));
                    nbr++;
                }
                else
                {
                    strcat(c2, tmp1);
                    tmp1 += strlen(tmp1);
                }
            }
            fputs(c2,f1);
        }
    ShowMessage("copier dans autre fichier");
     
    fclose (f); fclose (f1);
     
    f21 = fopen ("c://tata.txt", "r");
    f2 = fopen ("C://oracle//ora92//network//admin//sqlnet.ora", "w");
     
     while(fgets(ligne_lue, 999, f21) != NULL){
     
     fprintf(f2, "%s", ligne_lue);
     
      }
      fclose (f2); fclose (f21);
      remove("c://tata.txt");
    ShowMessage("recopier dans original");
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Le code suivant est généralement (presque toujours) incorrect.
    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
     
      char* dep;
      dep="TCP.EXCLUDED_NODES=(192.168.0.1)";
    // il faut écrire 
      strcpy(dep,"TCP.EXCLUDED_NODES=(192.168.0.1)");
    // il y a de fortes chances que ça provoque un écrasement de mémoire.
    // il faut donc déclarer dep avec une longueur suffisante.
     
    //Autres lignes types
      AnsiString msg=AnsiString(dep); 
      char *arr;
      arr=malloc(msg.Lensth()+1,1);
      strcpy(arr,msg.c_str());
      /* --- */
      free(arr);
    // etc
    L'utilisation de C++ ne dispense pas de connaitre les bases du C
    Voila.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Bonjour,

    Pour répondre simplement et rapidement, utilise la fonction c_str() qui convertit un string en char* (fonctionne aussi pour les AnsiString).

    Cordialement Thorgal100

  4. #4
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 105
    Par défaut
    salut , merci pour la reponse mais cette instruction elle me perd une partie du contenu de la variable.je c pas pourquoi ??. merci d'avance si vous avez la solution ou une autre astuce ?? .merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas c_str() qui perd une partie du contenu de la variable, c'est le tableau où vous allez le mettre qui n'est pas assez grand.
    il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      AnsiString msg="truc - machin chose";
      char tab[len+1];  // où len est le longueur maximum de la chaine à copier
      strcpy(tab,msg);
    // ou aussi
      char tab[msg.Length()+1];  
      strcpy(tab,msg);
    Ce n'est pas une astuce c'est la bonne manière de faire.

  6. #6
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 105
    Par défaut
    salut , merci pour la reponse mais moi j'utilise pas un tableau , j'utilise une variable normale de type char* . merci d'avance .

Discussions similaires

  1. conversion AnsiString en char*
    Par darkman13130 dans le forum C++Builder
    Réponses: 10
    Dernier message: 18/04/2009, 10h34
  2. conversion AnsiString en const char*
    Par Mangacker dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/05/2007, 18h43
  3. Probleme conversion AnsiString to Char
    Par El-Diablo- dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/05/2007, 09h36
  4. [Conversion]Convertir un char[] en int
    Par ThanosT dans le forum Général Java
    Réponses: 10
    Dernier message: 11/11/2005, 12h23
  5. "Conversion" d'un char en int ou longueur
    Par Michaël dans le forum C
    Réponses: 6
    Dernier message: 15/08/2003, 11h40

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