fstream + getline fehler bei verwendung von string!
-
ich möchte einzelne zeilen in ein string array abspeichern.
dazu habe ich diesen code hier:#include "string.h" ..... .... string stringarray[999]; .... ... fstream f("kA.kA", ios::in); while(!f.eof()) { f.getline((char*)stringarray[1],5); i++; };allerdings bekomme ich dabei immer einen fehler:
error C2440: 'type cast' : cannot convert from 'std::string' to 'char *'
was kann man da machen??
und wie kann man ein array mit unbestimmter größe deklarieren ohne eine fehlermeldung wegen einem zero array zu bekommen??
-
wie wäre es wenn du es so machst
int i = 0; while(getline(f,stringarray[i]) { i++; };ist aber ungetestet
achja es heißt nicht #include " string.h" sondern
#include<string>außer du hast dir eine eigene string klasse geschrieben
-
Hi,
benutz std::vector ( eine Art Array, welches seine Größe dynamisch selbst verwaltet ), dann hast du dein Problem mit deiner unbestimmten Größe schonmal nicht.
#include <fstream> #include <vector> #include <string> using namespace std; int main() { vector<string> stringarray; ifstream file("kA.kA"); string tmp = ""; while( getline( file, tmp ) ) stringarray.push_back(tmp); }Danach kannst du gewohnt mit stringarray[ index ] arbeiten ...
-
Versuchs mal mit
f.getline((stringarray[1].c_str(),5);Du kannst natürlich nicht ein Stringobjekt in einen char Zeiger casten. c_str() gubt Dir einen Zeiger auf den Null terminierten String
Mfg Mav
-
danke ich werd alles mal ausprobiern
-
aber .c_str() gibt einen const-char-Zeiger zurück.
Also kann getline() da nich reinschreiben.Afaik kann man der getline-Methode gar keinen String übergeben. Du brauchst also ein char-Array.
Du müsstest es also so ungefähr machen:vector<string> stringarray; fstream f("kA.kA", ios::in); while(!f.eof()) { char buf[256]; // vllt. anpassen f.getline(buf, 256); stringarray.push_back(buf); };
-
Beunutze die std::getline(..) Funktion (Header: <string>).
-
ok danke

-
@halo: Alles andere ist nur gefrickel und kein schönes C++. Mach dich mit dem vertraut, was ich geschrieben habe und bleib dabei. Bei unklare Stellen im Code kannst du ja nachfragen

-
ok
-
ich hab das ganze jetzt in eine klasse eingebaut, um den quelltext ein wenig ordentlicher zu gestalten!
allerdings kommt jetzt dieser fehler hier:error C2864: 'Cfile::tmp' : only static const integral data members can be initialized within a classdas bezieht sich auf diese zeile:
string tmp = "";wie kann man diesen fehler umgehn??
-
ok hab die lösung gefunden!!
einfach erst im konstruktor deklarieren!