Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] Przekazywanie Tekstu z TEdit do tablicy Char

DeeJaySqter 07 Maj 2010 16:12 2510 11
  • #1 07 Maj 2010 16:12
    DeeJaySqter
    Poziom 19  

    Witam. Dostałem w ramach zaliczenia do napisania pewnien program i napotkałem pewne problemy podczas realizacji tego zadania. Projekt ma charakter "bazodanowy".

    Używam BCB 6 personal

    Posiadam klasę "obiekt_p" w której znajduje się tablica char na 20 znaków, oraz kilka zmiennych typu int.
    Klasę tą zainkludowałem do formularza stworzonego przy użyciu biblioteki VCL

    W formularzu mam kilka pól Tedit i przycisk TButton. Przy pomocy Klasy obiekt_p chce stworzyć nowy obiekt który posiadać ma nazwę (wspomniany char ma byc nazwą, nazwa obiektu może być dowolna) i dane liczbowe. O ile z wczytywaniem zmiennych liczbowych wiem jak sobie poradzić to nie mam pojecia jak ugryźć kwestie przesłania tam tekstu.

    Mile widziane przykłady lub linki do stron z przykładami.

    0 11
  • #2 07 Maj 2010 18:39
    utak3r
    Poziom 25  

    Musisz w jakiejś metodzie (a najlepiej konstruktorze klasy) jako parametr dać char *, a w środku do tej swojej docelowej właściwości użyć strcpy, aby skopiować zawartość parametru.

    0
  • #3 08 Maj 2010 09:26
    DeeJaySqter
    Poziom 19  

    czyli jesli dobrze rozumiem

    Cytat:

    void zapamietaj (char * edit_txt)
    { strcpy(nazwa_w_klasie , edit_txt)}


    ok, tylko jak mam teraz przechwycić tekst z edita?

    Tak?

    Cytat:

    try

    {
    string tabl_char=Edit1->Text;
    }

    //potem gdzieś dalej...

    void zapamietaj (char * edit_txt)
    {
    tabl_char=&edit_txt
    strcpy(nazwa_w_klasie , edit_txt)
    }


    gdzie:
    nazwa_w_klasie - tablica char np na 20 znaków
    edit_txt - wskaźnik
    tabl_char - zmienna pomocnicza ?

    0
  • #4 08 Maj 2010 11:10
    utak3r
    Poziom 25  

    Moment, właśnie zaskoczyłem, że używasz BCB. W nim masz coś takiego, jak AnsiString, czyli klasa przeznaczona do przechowywania tekstów. Właśnie tego typu jest zawartość Edit->Text.

    Teraz masz dwie drogi: albo przekonwertować owo AnsiString na char*, albo - co jest zalecane - pozbyć się char* i użyć tej samej klasy. Widzisz, char* to typ będący pozostałością po ANSI C, jeden z bardziej niebezpiecznych typów w całym języku ;) Już C++ wprowadza nową klasę do użycia z tekstami - std::string. Tutaj masz wbudowany typ, przygotowany przez Borlanda. Używaj tego typu, zapomnij o char*.

    0
  • #5 08 Maj 2010 11:43
    DeeJaySqter
    Poziom 19  

    czyli poprostu

    Cytat:

    try
    {
    name = Edit1->Text;
    }


    Gdzie name jest zadeklarowane w klasie jako AnsiString.

    0
  • #6 08 Maj 2010 12:01
    lukagrom
    Poziom 16  

    Code:

    char nazwa_klasy_pobierana_z_Edit1[20];
    strcpy(nazwa_klasy_pobierana_z_Edit1,Edit1->Text.c_str());

    Lipa jest wtedy kiedy wklepiemy tekst przekraczający 20znakow. Ale od tego są wyjątki i "maski" wprowadzania.

    0
  • #7 08 Maj 2010 13:38
    beluosus
    Poziom 25  

    lukagrom napisał:
    Lipa jest wtedy kiedy wklepiemy tekst przekraczający 20znakow.

    Od tego to jest strncpy. Przykład:
    Code:
        const unsigned max = 20;
    
        char c[max];
        Edit1->Text = "12345678901234567890123";
        strncpy(c, Edit1->Text.c_str(), max);
        c[max - 1] = 0;
        Edit2->Text = c;

    0
  • Pomocny post
    #8 08 Maj 2010 17:56
    utak3r
    Poziom 25  

    DeeJaySqter napisał:
    czyli poprostu
    Cytat:

    try
    {
    name = Edit1->Text;
    }

    Gdzie name jest zadeklarowane w klasie jako AnsiString.


    Dokładnie właśnie tak - i tylko tak. Napisałem - zostaw te char*! Piszesz w C, czy C++?

    0
  • #9 09 Maj 2010 14:30
    DeeJaySqter
    Poziom 19  

    c++

    chyba wiem już czemu ciężko mi było znaleźć info o tym skoro to takie proste :P Niestety tak to jest gdy człowiek nie uczy się systematycznie.

    strasznie dziekuję wszystkim zaangażowanym za pomoc.

    0
  • #10 15 Sty 2012 22:39
    micho196
    Poziom 9  

    Może trochę nie w porę ale liczę na pomoc specjalistów:)

    Otóż mam taki problem ze nie mogę zapisać do pliku zawartości z pola Edit. Tzn. jak wartość wprowadzę z klawiatury to zapisze, a jak zrobię to "automatycznie" to nie zapisuje. Chodzi o to, że w polu Edit przechowuje ścieżkę dostępu do pliku graficznego. Obok jest button "zmień" i po jego naciśnięciu za pomocą OpenDialog->FileName wypełniam pole Edit właściwą treścią. Teraz chciałbym żeby program zapisał wprowadzoną wartość do pliku *.txt. Ale nie zapisuje... Mógłby mi ktoś wyjaśnić dlaczego? Jedyne co mi chodzi po głowie to jakieś zabezpieczenie windowsowe odnośnie wyłudzania informacji, loginów, haseł, itd... Jak wpisze tekst z klawiatury to zapisze plik, jak załaduje plik(w zasadzie ścieżkę do pliku) przez OpenDialog to nic nie zapisze. Męczę się już 3 dni niech ktoś mi powie o co tu chodzi? Borland C++ Builder 6.

    0
  • #11 16 Sty 2012 00:03
    utak3r
    Poziom 25  

    Daj chociaż kawałek kodu, jak to próbujesz zapisać... z samego tekstu nic tu nie wywróżymy.

    0
  • #12 16 Sty 2012 01:29
    micho196
    Poziom 9  

    Stary ja juz próbowałem na 5 rożnych sposobów i nic nie działa... ale oczywiście wkleję kod, taki może okrojony żeby było widać w czym jest problem:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Tak jak mowie jeżeli w pole Edit1 będę wpisywał tekst z klawiatury to sie zapisze poprawnie po naciśnięciu przycisku. Jeżeli będę ładował przez OpenDialog to ścieżkę do pliku uzyskam w polu Edit1 ale po kliknięciu przycisku nic się nie dzieje... Nie zapisuje tego pliku.

    0