logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C++] CString --> tablica char'ów; łączenie char'ów

zerpo 21 Lip 2005 20:39 13828 3
REKLAMA
  • #1 1671338
    zerpo
    Poziom 22  
    Posty: 463
    Pomógł: 50
    Ocena: 134
    Pisze mały programik w MFC. Chcę 'pociąć' zmienną CString z jednego TextBoxa na pojedyncze litery i załadować je do tablicy, i wyświetlić w sąsiednim TextBoxie, np.

    CString jakis_string("tekst");
    załadować do tablicy litera po literze (w osobnych indeksach)...
    Próbowałem tak:

    
    void CStringi3Dlg::OnButton1() 
    {	
    	char* tab = new char[20];
    
       for (int i=0; i<20; i++)
       tab[i]=m_tekst.GetAt(i);
    
    
    m_odbior =  tab[2]; //Tu nie wiem, jak posklejać CHARy z tablicy, 
                    //więć narazie próbuje z jednym elemetem :(
    
    	UpdateData(FALSE);
    }
    

    m_tekst jest to zmienna CString z TextBoxa, z ktorego pobieram tekst, a m_odbior z tego, co wyswietlam.

    No i dobra, prog. się kompiluje, ale po naciśnięciu na Button1 mam błąd... Debug Assertion Failed... Dodam, że jesli nie użyje pętli for, a ręcznie, po kolei 'tnę' stringa, to działa.
    tab[0]=m_tekst.GetAt(0);
    tab[1]=m_tekst.GetAt(1);
    tab[2]=m_tekst.GetAt(2);
    ....

    I jeszcze jedno: Jak posklejać tablice Charów w CStringa? Jak zrobić coś takiego: tab[0] + tab[1] + tab[2]... aby było to potem traktowane jak jeden łańcuch?
    Nie jestem asem z C, więc proszę o wyrozumiałość. Wiem, że operacja którą chcę tu wykonać jest niepotrzebna, bo można od razu przekazać zmienną do drugiego Text..., ale mi jest to jednak potrzebne.
    Będę wdzięczny za wskazówki.[/code]
  • REKLAMA
  • #2 1671541
    The Dino
    Poziom 13  
    Posty: 25
    Pomógł: 5
    Tak na oko, to problemem jest odwołanie się do elementów z poza tablicy - zawsze pobierasz 20 znaków, ale skąd masz pewność, że ich tam jest tyle? Może być np. 5 i wtedy pętla ci pobierzesz 5 znaków, a przy pobieraniu 6, przy odwołaniu GetAt(5) ci się po prostu wywali, bo element taki nie istnieje.

    Co do drugiego jest funkcja StrCat, z tym, że jeśli łączysz ileś tam np. jedno elementowych elementów to nie lepiej "wstawić" je do innej tablicy, jeden po drugim i wyjdzie ci tego złączenie? 8-) .
  • REKLAMA
  • #3 1672156
    zerpo
    Poziom 22  
    Posty: 463
    Pomógł: 50
    Ocena: 134
    Zgadzało się, tablica była za duża, teraz jej wielkość jest przydzielana dynamicznie. Ze sklajaniem tez sobie poradziłem, oto fragment kodu:
    
    	CString wiadomosc, wiadomosc2, temp, temp2;
    	int size=m_tekst.GetLength(); //Długość wpisywanego tekstu.
    	char* tab = new char[size];		//Tablica przechowująca chary po rozicviu CString'a
    	unsigned char* ascii=new unsigned char[size];
    
    	
    
    for (int i=0; i<size; i++)		// 
    {						//  rozbicie CStringa na chary.
    	tab[i]=m_tekst.GetAt(i);
    }
    
    
    for (int b=0; b<size; b++)	//Petla sklejajaca tablice w całość, w CString'a 
     {                                        
      temp.Format("%c", tab[b]);
      wiadomosc += temp;
    }
    
    
    m_odbior =  wiadomosc;
    	UpdateData(FALSE);
    }
    
    


    Kod troche zmieniłem, bo w rzeczywistości jest dłuższy, więc mogłem się gdzieś kopnąć. Ogólnie operacje te potrzebne mi były do przesyłania i odbierania danych przez port COM.
    Wszytko już działa :-)
    Pozdrawiam
REKLAMA