Char nach AnsiString



  • Hallo,

    mit folgenden Zeilen konvertiere ich einen Ansistring nach Char

    C++ Code:
    char *ch = new char[WortZeichen02.Length()+1];
    strcpy(ch, WortZeichen02.c_str());
    delcharKonvert = *ch;
    delete [] ch;

    Frage: wie konvertiere ich Char nach Ansistring ?

    Gruß Siegfried



  • ...mit

    AnsiString mein_string = AnsiString(eine_beliebiger_char_variable);
    

    Aber wieso konvertierst du deinen AnsiString so umständlich nach char?

    Du kannst doch einfach direkt

    char* ein_char = ein_ansi_string.c_str()
    

    verwenden? (zumindest wenn es ein char***** sein darf)



  • hallo,
    diesen Code stammt nicht von mir, sondern aus dem Forum. Habe ihn etwas angepasst. Den neuen Code muß ich checken.

    Mein vorhaben ist fogendermaßen:
    Ich konvertiere ein Ansistring-Zeichen nach Char und anschießend diesen (Char) in einen Integer-Wert.
    Diesem Integer-Wert wird anschießend eine Zahl addiert.
    Danach konvertiere ich Integer nach Char.
    Bis hier klappt alles.
    zum Schluß muß der Char-Variable in einen Ansistring wider konvertiert werden.

    was muß ich hier tun ?
    Gruß Siegfried



  • Reyx schrieb:

    ...mit

    AnsiString mein_string = AnsiString(eine_beliebiger_char_variable);
    

    Da der char*-Konstruktor von AnsiString nicht explicit ist, kannst du die char*-Variable auch direkt zuweisen:

    char* charptr[] = "Hallo!";
    AnsiString myString = charptr;
    

    Beppo schrieb:

    Mein vorhaben ist fogendermaßen:
    Ich konvertiere ein Ansistring-Zeichen nach Char und anschießend diesen (Char) in einen Integer-Wert.
    Diesem Integer-Wert wird anschießend eine Zahl addiert.
    Danach konvertiere ich Integer nach Char.
    Bis hier klappt alles.
    zum Schluß muß der Char-Variable in einen Ansistring wider konvertiert werden.

    Warum so umständlich? Schreibe doch einfach

    AnsiString str = "12";
    int to_add = 34;
    str = AnsiString (str.ToInt () + to_add);
    

    Moritz



  • Reyx schrieb:

    Du kannst doch einfach direkt

    char* ein_char = ein_ansi_string.c_str()
    

    verwenden? (zumindest wenn es ein char***** sein darf)

    Schau Dir mal das Beispiel in der BCB-Hilfe zu c_str() an.

    Gruß,

    Alexander



  • Alexander Kempf schrieb:

    Reyx schrieb:

    Du kannst doch einfach direkt

    char* ein_char = ein_ansi_string.c_str()
    

    verwenden? (zumindest wenn es ein char***** sein darf)

    Schau Dir mal das Beispiel in der BCB-Hilfe zu c_str() an.

    Gruß,

    Alexander

    ...soll heißen?
    Ich verstehe den Sinn bzw. den Ausdruck dieser Aussage nicht ganz? 🙄



  • Reyx schrieb:

    Alexander Kempf schrieb:

    Schau Dir mal das Beispiel in der BCB-Hilfe zu c_str() an.

    ...soll heißen?

    Dass Du Dir das mal anschauen solltest.

    Gruß,

    Alexander



  • OK, aber warum?
    Letzendlich steht da ja nichts anderes drinnen, als was ich gesagt habe (ok, mal abgesehen von der direkten Zuweisung)... naja egal, es funktioniert ja 😉



  • Hi,
    wenn ich mich richtig erinnere ist der Zeiger den c_str() zurückliefert nur in dem Moment des Ausrufes der Funktion gültig. Das bedeuted, wenn du den Zeiger den dir c_str() zurückliefert einfach so speicherst, kann und wird es dir passieren, dass irgendwann mal irgendwas anderes an der Stelle im Speicher steht und dir dein Programm mit einer undefinierbaren Exception "abschmiert".

    Ich vermute mal darauf wollte dich Alexander Kempf hinweisen...

    MfG

    Alexander Sulfrian



  • Das kann gut sein (ich hab in der BCB-Hilfe nachgesehen, aber dass muss ich wohl übersehen haben)... tja, man lernt halt nie aus 😃



  • Reyx schrieb:

    ... naja egal, es funktioniert ja 😉

    Ich würde eher sagen: Wenn's funktioniert, dann hast Du Glück gehabt.

    Alexander Sulfrian schrieb:

    wenn du den Zeiger den dir c_str() zurückliefert einfach so speicherst, kann und wird es dir passieren, dass irgendwann mal irgendwas anderes an der Stelle im Speicher steht und dir dein Programm mit einer undefinierbaren Exception "abschmiert".

    Und das ist noch der "Gut"-Fall. Ich habe tatsächlich mal solch ein "undefiniertes" Verhalten in einem
    Programm beobachtet. Im schlimmsten Fall gibt es nämlich keine Exception, sondern Du hast dann
    irgendwelchen Datenschrott ohne das zu merken - aber in anderen Fällen geht's vielleicht doch gut.
    Solche Fehler ausfindig zu machen, macht keinen Spaß.

    Gruß,

    Alexander



  • Beppo schrieb:

    Ich konvertiere ein Ansistring-Zeichen nach Char und anschießend diesen (Char) in einen Integer-Wert.

    char *ch = new char[WortZeichen02.Length()+1];
    strcpy(ch, WortZeichen02.c_str());
    delcharKonvert = *ch;
    

    Falls es Dir wirklich nur um ein Zeichen geht, ist das recht umständlich. Anderer Vorschlag:

    String s = "456";
    char c = s[1];
    int i = c - 48;
    ...
    


  • Hallo,

    wenn auch spät, danke an alle

    Gruß Siegfried

    👍


Anmelden zum Antworten