Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Wypełnianie tablicy zanków tekstem

Ostatnio zmodyfikowano 2015-01-16 18:52
Autor Wiadomość
lamamasters
Temat założony przez niniejszego użytkownika
[C++] Wypełnianie tablicy zanków tekstem
» 2015-01-11 18:10:44
Witam,
Chciałbym nie używając stringów wczytać tekst do struktury/klasy.

Normalnie do tablicy char ciąg można przypisać tak:  char zmienna[] = "tekst";
Niestety nie wiem jak użyć tego w odwołaniu do struktury...

C/C++
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;

struct struktura
{
    char zmienna[];
};

int main()
{
    struktura mojaStruktura[ 10 ];
   
    //Chce przypisac teskt do zmiennej w strukt.
    mojaStruktura[ 0 ].zmienna = "tekst";
   
    //Chce wyswietlic zawartosc
    cout << mojaStruktura[ 0 ].zmienna;
   
    cin.ignore();
    getchar();
}
P-124670
stryku
» 2015-01-11 18:40:22
Jeżeli tego tekstu nie będziesz modyfikować to w strukturze daj
char * tekst;
 i zadziała.

Ale jeżeli chcesz go modyfikować to ładniej będzie stworzyć kopie napisu;

C/C++
struct struktura
{
    char * zmienna;
   
    struktura()
        : zmienna( nullptr )
    { }
    ~struktura()
    {
        if( zmienna != nullptr )
             delete[] zmienna;
       
    }
};

int main()
{
    struktura mojaStruktura[ 10 ];
    const char * napis = "tekst";
    //Chce przypisac teskt do zmiennej w strukt.
   
    mojaStruktura[ 0 ].zmienna = new char[ strlen( napis ) + 1 ];
    strcpy( mojaStruktura[ 0 ].zmienna, napis );
   
    //Chce wyswietlic zawartosc
    cout << mojaStruktura[ 0 ].zmienna;
   
    cin.ignore();
    getchar();
}

No ale jeżeli już piszesz w C++ to czemu nie używać stringów? Mieszanie C i C++ nie jest dobre.
P-124671
lamamasters
Temat założony przez niniejszego użytkownika
» 2015-01-11 18:45:10
Mój Boże! Podziwiam ludzi, którzy siedzą w C++... To jest jakiś koszmar, tutaj niczego nie da się zrobić tka po prostu.

Dziękuję za pomoc. Niestety nie używam stringów bo nie da się ich zapisać do pliku a następnie odczytać :) :) :)

Uświadomiłem to sobie w poprzednim poście - http://cpp0x.pl/forum/temat/?id=18278
P-124672
stryku
» 2015-01-11 18:55:29
No teraz to poleciałeś.

To, że "nie można ich zapisać ani odczytać" wynika właśnie z tego, że pomieszałeś tam C z C++. Zamiast fstream zacząłeś używać FILE i lipa wyszła.

Jest jakiś mocny argument, że tak mieszasz C z C++? (profesor kazał czy coś) Bo jeżeli nie ma to radziłbym przerobić tamten kod na samo C++ to i stringi będzie Ci łatwiej używać itp.

Z resztą string ma mocne udogodnienia względem cstringów
P-124673
NopeDotAvi
» 2015-01-11 18:56:32
można na stringach i plikach działać bezproblemowo, Ty mieszasz c z c++
P-124674
lamamasters
Temat założony przez niniejszego użytkownika
» 2015-01-11 19:20:48
Dzięki za odp.
Za pomocą strcpy() można bez problemu ładować ciągi do tablic char w strukturach.


Jeśli chodzi o stringi. Może źle się wyraziłem :) Nie działa mi zapisywanie+wczytywanie klas/struktur opartych o stringi :)

W tym działającym przykładzie po usunięciu komentarzy zawierających zmienną imie (zmienna typu string) (są 3), przestaje działać zapis i odczyt.
W przykładzie z mojego innego postu działały nawet stringi! Tylko trzeba było wywołać najpierw zapis :)
Właśnie dlatego odczuwam taką straszną niemoc :)

C/C++
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <conio.h>

using namespace std;

class init {
public:
    int anzahl_1;
    //std::string imie;
};

init anzahl[ 2 ];
init anzahl2[ 2 ];
FILE * f;
static string ss = "test.txt";


void account_anzahl1()
{
   
    f = fopen( ss.c_str(), "r" );
    for( int i = 0; i < 2; i++ ) {
        fread( & anzahl2[ i ], sizeof( init ), 1, f );
    }
    fseek( f, 0, SEEK_END );
    fclose( f );
   
   
}
void account_anzahl_plus()
{
   
    f = fopen( ss.c_str(), "w" );
    for( int i = 0; i < 2; i++ ) {
        fwrite( & anzahl, sizeof( init ), 1, f );
    }
    fclose( f );
}

main() {
    anzahl[ 0 ].anzahl_1 = 65;
    //anzahl[0].imie = "asdasd";
    anzahl[ 1 ].anzahl_1 = 22;
   
   
    account_anzahl1();
    account_anzahl_plus();
   
    cout << "to: " << anzahl2[ 0 ].anzahl_1 << " ";
    //cout << "Imie: " << anzahl2[0].imie;
   
    cin.ignore();
    getchar();
}
P-124677
pekfos
» 2015-01-15 20:39:35
Mieszanie C i C++ nie jest dobre.
W C były np. zmienne. Używanie ich w C++ nie jest dobre..?
P-125001
1aam2am1
» 2015-01-16 08:13:17
Poco utrudniać sobie życie bibliotekami z C jeżeli mamy biblioteki w C++ robiące podobne rzeczy np:
FILE i std::fstream. To i to służy do obsługi plików. Więc mając std::string lepiej użyć biblioteki z C++.
Po prostu lepiej ułatwić sobie życie.
P-125019
« 1 » 2
  Strona 1 z 2 Następna strona