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... #include <iostream> #include <fstream> #include <iomanip> #include <string> using namespace std;
struct struktura { char zmienna[]; };
int main() { struktura mojaStruktura[ 10 ]; mojaStruktura[ 0 ].zmienna = "tekst"; cout << mojaStruktura[ 0 ].zmienna; cin.ignore(); getchar(); }
|
|
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; struct struktura { char * zmienna; struktura() : zmienna( nullptr ) { } ~struktura() { if( zmienna != nullptr ) delete[] zmienna; } };
int main() { struktura mojaStruktura[ 10 ]; const char * napis = "tekst"; mojaStruktura[ 0 ].zmienna = new char[ strlen( napis ) + 1 ]; strcpy( mojaStruktura[ 0 ].zmienna, napis ); 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. |
|
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 |
|
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 |
|
NopeDotAvi |
» 2015-01-11 18:56:32 można na stringach i plikach działać bezproblemowo, Ty mieszasz c z c++ |
|
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 :) #include <iostream> #include <fstream> #include <iomanip> #include <string> #include <conio.h>
using namespace std;
class init { public: int anzahl_1; };
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[ 1 ].anzahl_1 = 22; account_anzahl1(); account_anzahl_plus(); cout << "to: " << anzahl2[ 0 ].anzahl_1 << " "; cin.ignore(); getchar(); }
|
|
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..? |
|
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. |
|
« 1 » 2 |