long to string



  • Ups, stimmt!
    Aber auch die Änderung zu:

    LPTSTR s = "";
    m_ComboBoxWerte.GetLBText(m_ComboBoxWerte.GetCurSel(), s);
    CString s2 = s;
    int anzahl = atoi(s2);
    

    Hilft nichts. Die andere Methode habe ich auch versucht anzuwenden, aber auch das hab ich nicht hinbekommen...

    Noch nen Tipp?



  • Stürzt er beim atoi ab? Ist es eine Null pointer exception?



  • Ja, String-Literale darf man normalerweise nicht vom Programm aus überschreiben. Entweder du nimmst ein Array TCHAR s[len]; (den Wert von len mußt du groß genug ansetzen, um Platz zu haben) oder du holst dir den nötigen Speicher vom Heap LPTSTR s = new TCHAR[m_ComboBoxWerte.GetLBTextLen(m_ComboBoxWerte.GetCurSel())+1]; .

    PS: Die Umwandlung von LPTSTR nach CString (s2=s) und wieder zurück (implizit beim Funktionsaufruf) ist übrigens unnötig 😉



  • Danke euch beiden. Jetzt bekomm ich eine Zeile später nen Fehler. Und das liegt allerdings daran, dass anzahl = 0 ist, obwohl ich in der ComboBox z.B. "10" drinstehen habe. Also liegt Fehler jetzt in dem Auslesen des Textes aus der ComboBox. Aber die Methode müsste doch die richtige sein oder?



  • Ist denn der Eintrag mit der 10 überhaupt ausgewählt? (oder auf deutsch: Was für einen Wert liefert GetCurSel() zurück?)



  • Stimmt das sollte ich mal schauen ^^.
    Also:

    LPTSTR s = "";
    int sel = m_ComboBoxWerte.GetCurSel();
    m_ComboBoxWerte.GetLBText(sel, s);
    CString s2 = s;
    int anzahl = atoi(s2);
    

    In sel steht eine 3 aber in anzahl eine 0! Und der vierte Eintrag ist ausgewählt (also index 3) und dort steht in der ComboBox eine "100".



  • es interessiert doch nur was in s2 drin steht.



  • Was sagt der Debugger?

    PS: Und wir sind wieder beim Anfang - du hast keinen verwertbaren Speicherplatz bereitgestellt, wo der String-Inhalt reingepackt werden könnte (erstaunlich, daß Windows dich nicht mit einer Access Violation darauf hinweist):

    int sel = m_ComboBoxWerte.GetCurSel();
    LPTSTR s = new TCHAR[m_ComboBoxWerte.GetLBTextLen(sel)+1];
    m_ComboBoxWerte.GetLBText(sel, s);
    int anzahl = atoi(s);
    delete[]s;
    


  • plizer schrieb:

    Ich will jetzt aus einer ComboBox nur den ausgewählten Text als int umwandeln. In Java ginge dies so:

    int anzahl = new Integer(jComboBox.getSelectedItem().toString()).parseInt();
    

    will mal erbsen zählen. in java macht man das so:

    int anzahl = Integer.parseInt(jComboBox.getSelectedItem().toString());
    


  • thordk schrieb:

    plizer schrieb:

    Ich will jetzt aus einer ComboBox nur den ausgewählten Text als int umwandeln. In Java ginge dies so:

    int anzahl = new Integer(jComboBox.getSelectedItem().toString()).parseInt();
    

    will mal erbsen zählen. in java macht man das so:

    int anzahl = Integer.parseInt(jComboBox.getSelectedItem().toString());
    

    Stimmt :-). Ich meinte auch intValue() statt parseInt(). Aber gut, das new kann man sich natürlich auch sparen. Tja, es ist soweit, bald kann ich kein C++ und auch kein Java mehr, buhu...

    @CStoll: Es läuft jetzt, vielen Dank! Aber ich muss sagen, dass man schon einiges auf den Kasten haben muss, um genau drauf zu kommen. Dabei ging es doch "nur" um das Auslesen eines Textes aus der ComboBox. Du hast mir einige Stunden erspart, vielen Dank! 🙂



  • plizer schrieb:

    @CStoll: Es läuft jetzt, vielen Dank! Aber ich muss sagen, dass man schon einiges auf den Kasten haben muss, um genau drauf zu kommen. Dabei ging es doch "nur" um das Auslesen eines Textes aus der ComboBox. Du hast mir einige Stunden erspart, vielen Dank! 🙂

    Daß man bei C-String (char-Array) Funktionen üblicherweise selber den nötigen Speicher bereitstellen sollte, gehört eigentlich zu Grundwissen - dacht ich zumindest 😉


Anmelden zum Antworten