Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Zuweisung von variablen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.11.2008, 09:40 Uhr
~zuwe
Gast



Code:
char* rbuffer [1000];

bool read (string path, bool submit)
{
    char buffer [1000];
    int i = 0;

    ifstream in;
    in.open (path.c_str(), ios::in);
    while (!in.eof())
    {
        in.getline(buffer, 999);
        strcpy (rbuffer[i], buffer);
        i++;        
    }
    in.close();

    return true;
}



Gibt einen Segmentation Fault bei: strcpy()
Kann mir wer weiterhelfen?

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.11.2008, 10:45 Uhr
ao

(Operator)


char rbuffer [1000]; // ohne Sternchen.

Ohne Sternchen ist das ein 1000 Zeichen langes char-Array (das willst du vermutlich).

Mit Sternchen sind das 1000 uninitialisierte Pointer, die in den Wald zeigen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.11.2008, 12:07 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ansonsten ist strcpy allgemein gefährlich da es nicht auf die größe des zielpuffers prüft. warum benutzt du nicht gleich "string" wenn du schon c++ benutzt?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.11.2008, 15:59 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ansonsten lieber sprintf (oder einfacher snprintf wenn vorhanden) um die Länge der zu kopierenden Zeichen begrenzen zu können.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.11.2008, 16:13 Uhr
~zuzeee
Gast



Zitat von Guybrush Threepwood:
Ansonsten lieber sprintf (oder einfacher snprintf wenn vorhanden) um die Länge der zu kopierenden Zeichen begrenzen zu können.

strncpy() würd ich nehmen wenn ichs begrenzen muss.
wenn ich den * also den pointer wegnehme, bringt das nichts - das ganze lässt sich nicht kompilieren.

wie würde das mit strings aussehen?
lg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.11.2008, 16:18 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von ~zuzeee:

wenn ich den * also den pointer wegnehme, bringt das nichts - das ganze lässt sich nicht kompilieren.


Eine genaue Fehlermeldung wäre nächstes mal hilfreich auch wenn man den Fehler hier direkt sieht

Wie ao schon geschrieben hat ist dein char* rbuffer [1000]; ein Array von 1000 uninitialisierten Pointern.
Wenn du nun darin jede Zeile deiner Datei speichern willst dann musst du vorher für die jeweilige "Reihe" deines Arrays auch Speicher reservieren.
Also rbuffer[i] = malloc(länge);

Den Speicher musst du natürlich auch wieder freigeben wenn du ihn nicht mehr brauchst.

Alernativ könntest du auch natürlich auch ein statisches Array machen also char rbuffer [1000][1000];

Schick ist das aber nicht. Was hast du eigentlich vor?

Dieser Post wurde am 10.11.2008 um 16:20 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.11.2008, 16:26 Uhr
0xdeadbeef
Gott
(Operator)


Zum Beispiel:

C++:
bool read (std::istream &in, std::vector<std::string> &rbuffer)
{
    std::string line;

    while(std::getline(in, line))
    {
        rbuffer.push_back(line);
    }

    return true;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: