Teil eines Strings in char umwandeln



  • Ich hab es so probiert: (die Fehlermeldung ist auch gleich dabei)

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
      : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    char mychar = RichEdit1->Lines->Strings[0][0];
    /*
    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project Project2.exe raised exception class EAccessViolation with message
    'Access violation at address 40009720 in module 'rtl60.bpl'.
    Read of address 78982603'. Process stopped. Use Step or Run to continue.
    ---------------------------
    OK   Help
    ---------------------------
    */
    }
    //---------------------------------------------------------------------------
    

    in dem RichEdit steht "RichEdit1", is also nicht leer.
    Warum nur geht das nicht???



  • aus delphi kenn ich das, dass ansistrings bei "eins" anfangen, probier mal



  • Hallo,

    So sollte es gehen:

    char *mychar ;                                    // Pointer auf einen char
    
    mychar =  RichEdit1->Lines->Strings[0].c_str();   // den Ansistring aus RichEdit mit c_str()
                                                      // in einen solchen umwandeln...
    
    Label1->Caption= mychar;                          // zur Kontrolle wieder ausgeben
    

    .....Strings[0][0] gibt es meines Wissens nach nicht!

    Nagel mich drauf fest. Suche in der Hilfe nach Pointer und / oder probiere es aus... 😉

    Gruß
    Timmy



  • Wenn du allerdings nur auf das erste, bzw. irgendein Zeichen zugreifen willst, nimmst du:

    mychar =  RichEdit1->Lines->Strings[0].SubString(1,1).c_str();
    

    Gruß
    Timmy



  • superninny79 schrieb:

    Strings[0][0] gibt es meines Wissens nach nicht!

    Gibt es wohl, sieh dir mal die AnsiString-Operatoren an. Nur dass der Index von AnsiString eben, wie von c.rackwitz erwähnt, bei 1 beginnt, nicht bei 0. Ansonsten ist BlackShadows Ansatz korrekt.

    Da normalerweise aber anstelle der AccessViolation eine Exception auftreten müsste (ERangeError o.ä.) vermute ich mal, dass seine Fehlermeldung anderswo im Code verursacht wird. Oder er benutzt eine alte BCB-Version, in der es noch keine entsprechende Exception gab.



  • Ich habe nix gesagt und behaupte das Gegenteil...

    🤡



  • char mychar = RichEdit1->Lines->Text[1];



  • aus delphi kenn ich das, dass ansistrings bei "eins" anfangen, probier mal

    Jo, so ist es! Irgendwie ein blödes System, wo doch alles andere auch bei 0 anfängt.

    Da normalerweise aber anstelle der AccessViolation eine Exception auftreten müsste (ERangeError o.ä.) vermute ich mal, dass seine Fehlermeldung anderswo im Code verursacht wird

    Nee, das war das einzige, was im Quelltext stand (außer dem Anfangs-Standard-Kram).
    Ich benutze BC++ Builder 6.0 Enterprise, sollte also nicht veraltet sein.

    Aber egal, Problem gelöst! Danke für eure Antworten!


Anmelden zum Antworten