komischer Indexwert bei der Listbox



  • Hallo,

    ich habe da ein Problem mit meinen Index der ListBox. Nachdem ich m_ctrlList1.GetText(nIndex, (LPSTR)&buff) ausgeführt habe um den Text der Zeile bei Index 0 zu bekommen um den Test in eine Datei zu schreiben, wird mein Index auf einer sehr seltsamen Zahl gesetzt (538976288) obwohl ich nichts mit dem Index mache. Weis jemand mir da zu helfen ?

    if(m_ctrlList1.GetCount() != 0)
    		{
    			DWORD nIndex = 0;
    			CString buff;
    			CString strFile = m_strLogPath+"\\"+strFileDate+"_lv1.log";
    			CFile file(strFile, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite);
    			int length = 0;
    
    			do
    			{
    				DWORD tmpIndex = m_ctrlList1.GetTopIndex();
    				length = m_ctrlList1.GetText(nIndex, (LPSTR)&buff);					
    
    				if(length != LB_ERR)
    				{
    					file.Write(&buff, length);
    					nIndex++;
    				}
    			}
    			while(length != LB_ERR);
    
    			file.Close();
    		}
    

    danke schon mal



  • also, die anwendung der do while schleife in diesem fall ist nicht korrekt. du musst die while schleife nehmen, da die do-while IMMER in den code springt, auch wenn die bedingung beim 1. mal nicht erfuellt ist.

    mit nIndex holst du dir den string mit dem index 0 aus der list box: wer sagt, dass es diesen string gibt? -ich denke du musst dir das nochmal durch den kopf gehen lassen, was nIndex und tmpIndex machen. eine variable ist hier wohl zuviel?! du moechtest doch den inhalt an der stelle tmpIndex rausholen? -denn von dem weisst du ja auch, dass an seiner stelle n string in der box steht, oder?!

    Esco



  • mike2003 schrieb:

    m_ctrlList1.GetText(nIndex, (LPSTR)&buff);

    Erst den Compiler mit einem Cast ruhigstellen, und sich dann wundern, wenn es Laufzeitfehler gibt... 🙄

    (LPSTR)& muss weg.



  • danke Leute und was muss ich anstatt (LPSTR)& schreiben ?

    Das ist richtig das tmpIndex zu viel ist die habe ich ja auch nur zum speichern der Variable benutzt nur zum testen das ganze.

    Die do while Schleife muss ich schon nehmen da ich das erste mal auf jedenfall ausführen möchte.



  • mike2003 schrieb:

    [cpp]
    while(length != LB_ERR);[cpp]

    mike2003 schrieb:

    Die do while Schleife muss ich schon nehmen da ich das erste mal auf jedenfall ausführen möchte.

    aaahja... alles klar.

    Esco



  • Hab es hinbekommen lag an (LPSTR)&

    Jetzt habe ich das so gelöst:

    CString buff;
    CString& r_buff = buff;
    

    danke trotzdem für Eure Hilfe.

    P.S. do - while ist hier angebrachter



  • mike2003 schrieb:

    P.S. do - while ist hier angebrachter

    so. jetzt interessiert mich aber mal warum!

    waiting...

    Esco



  • Der Fehler hatte nichts mit der while Schleife zu tun MFK hatte schon recht.

    Gruß



  • mike2003 schrieb:

    Der Fehler hatte nichts mit der while Schleife zu tun MFK hatte schon recht.

    Gruß

    klar hatte MFK recht, die do-while schleife ist hier trotzdem fehl am platz 🙂

    Esco


Anmelden zum Antworten