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 class
    

    das bezieht sich auf diese zeile:

    string tmp = "";
    

    wie kann man diesen fehler umgehn??



  • ok hab die lösung gefunden!!
    einfach erst im konstruktor deklarieren!


Anmelden zum Antworten