Łączenie stringów

0

Robię projekt na zaliczenie i potrzebuję paru wskazówek. Zrobić mam dziennik szkolny. każda klasa ma swój plik tekstowy znajdujący się w c:/Dziennik/dane/klasy/. Nazwy klas mam w ListBoxie, każdą w nowej linii. Potrzebuję ścieżkę do pliku tej klasy która zaznaczona jest w listboxie. "Klasy" to listbox, a Memo2 dałem tak dla ułatwienia, będzie niewidoczne. Korzystam z Borlandowego buildera 6 w wersji personal.

Dodam że w memo ma 3 puste linijki. Dla ułatwienia robię krokami. Powiedzmy że zaznaczę klasę 1b i spróbuję pobrać ścieżkę.

Memo2->Lines->Strings[0]=Klasy->Items->Strings[Klasy->ItemIndex]; // do pierwszej linii zapisuje nazwę klasy zaznaczoną w listboxie
AnsiString sciezka1=strcat("c:/Dziennik/dane/klasy/",Memo2->Lines->Strings[0].c_str()); // w sciezka1 zapisuje sie "c:/Dziennik/dane/klasy/1b"
Memo2->Lines->Strings[1]=strcat(sciezka1.c_str(),".txt"); // do 2 linii powinno wpisać "c:/Dziennik/dane/klasy/1b.txt" a wypisuje "c:/Dziennik/dane/klasy/1bb"

Proszę o jakąś pomoc bo się z tym męczę już chwilę.. ;)

1
strcat("c:/Dziennik/dane/klasy/",Memo2->Lines->Strings[0].c_str())
strcat(sciezka1.c_str(),".txt") Boże widzisz

o_O
To teraz z łaski swojej przeczytaj w dokumentacji czego nie wolno robić z

  1. Stałymi literałami w kodzie
  2. Z wynikiem zwracanym z c_str()
    Podpowiem: NIE WOLNO ICH ZMIENIAĆ (no może ad.1. przy odpowiednich opcjach kompilatora wolno zmienić, ale na pewno NIE wolno dopisywać do nich). To jest mniej więcej tak:
  • Stworzyłes tablicę na X elementów i wypełniłeś ją danymi. Następnie próbujesz tam jeszcze coś dopisać, a miejsca tam już nie ma. A potem się dziwisz że coś się nie za bardzo dopisało.
    Rozumiem że ukradli ci klasę <string> i niestety nie możesz jej używać? Może jednak się z nią zaprzyjaźnisz?

Poza tym nie stosuje komponentów do przechowywania danych w ten sposób. Od tego są zmienne/obiekty! Wiem ze nie są takie fajne bo nie da się ich wyklikać i zobaczyć jak ładnie wyglądają na formie, ale mimo wszystko są dość przydatne...

string jestem_smierdzacym_leniem_i_nie_czytam_dokumentacji = string(Klasy->Items->Strings[Klasy->ItemIndex]);
jestem_smierdzacym_leniem_i_nie_czytam_dokumentacji = string("c:/Dziennik/dane/klasy/") + jestem_smierdzacym_leniem_i_nie_czytam_dokumentacji + string(".txt");
Memo2->Lines->Strings[0]=jestem_smierdzacym_leniem_i_nie_czytam_dokumentacji.c_str();

(nie mam pod ręką BCB ale coś w ten deseń spokojnie powinno zadziałać...)

0

ok działa ;) dzieki za pomoc ;)

wcześniej próbowałem ze stringami ale wyskakiwało "[C++ Error] Unit3.cpp(64): E2451 Undefined symbol 'string'", trzeba było dodać using namespace std;, teraz działa wporządku i nie musze już wykorzystywać do tego komponentu memo.. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1