wieviele zeilen kann getline lesen ?
-
hallo forum,
bin noch ziemlich unerfahren was programmierung angeht. ich versuche mich
zur zeit im rahmen meiner studienarbeit an einem ascii vrml to openinventor
converter ( die vrml files werden von catia erzeugt und enthalten so nur ca.
25 begriffe die ich ändern muß, also strings ersetzen ). mein problem ist,
dass ich es im moment nicht schaffe eine vrml-datei komplett zu lesen und in eine andere datei zu schreiben. ich bekomme immer die cerr so sehen.
code-bsp:
char zeile[80];
string suche;
while (wrldatei.getline(zeile, 80))
{
suche = zeile;
ivdatei << suche << endl;
}
if ( !datei.eof())
{
cerr << "Fehler beim Lesen der Datei" << endl;
return 3;
}das vrml-file ist 3.5 mb groß, und auf diese art werden nur ca. 10% der datei
gelesen und in die andere datei geschrieben. kann mir jemand helfen den fehler
zu finden ?
vielen dank im vorrausso long
charly
-
hallo,
ich hab das problem wohl schon gefunden, auch wenn es mich einiges an kopfzerbrechen
gekostet hat, aber als ich in obigem bsdp char zeile[80] auf char zeile[1000] gesetzt
hab, hat es funktioniert.
trotzdem vielen dankso long
charly
-
warum verwendest du nicht einfach die "strings" aus der c++ klasse, dann hast du diese probleme mit den "char" nicht mehr.
nur so nebenbei.
char ist c
string ist c++
-
Blacknator schrieb:
char ist c
Ehrlich
? Das musst du mir mal erklären!
-
was soll ich denn da noch erklären? char wird eigentlich nur noch in c verwendet, nicht mehr in c++, oder nicht? Ich lasse mich auch gerne eines besseren belehren wenn du es besser weist...
-
Also char wird auch in C++ noch verwendet, aber es ist sehr selten geworden, dass Zeiger auf char-Arrays als Strings verwendet werden.
Da ist ein grober Unterschied.
MfG SideWinder
-
Ob char , const char * oder string, ist eine Frage der Abstraktionsebene.
Wenn du direkt einen Puffer verwalten musst, und es auf geschwindigkeit
ankommt ist char * sicher ok, solange du es vernünftig einbettest. (längenprüfung etc.)
So würde ich z.B. bei einer streambuf klasse einen char oder const char* nehmen.Für Normale Anwendungen tut es häufig aber string.
Devil
-
Der Punkt mit der Geschwindigkeit hört sich gut an, sollte ich mal ausprobieren ob das einlesen von Dateien dann schneller geht, könnte ich mir zumindest gut vorstellen.
-
Blacknator schrieb:
was soll ich denn da noch erklären? char wird eigentlich nur noch in c verwendet, nicht mehr in c++, oder nicht? Ich lasse mich auch gerne eines besseren belehren wenn du es besser weist...
noob, schon mal daran gedacht das es C++ Programme gibt, die keine STL benutzen sondern nur templates und klassen, da diese Plattformunabhängig sind, während die STL dies nicht ist, sondern es immer nur Ports gibt?
-
Dadrüber noch zu diskutieren würde das Thema sprengen worum es eigentlich geht.
-
nix da schrieb:
noob, schon mal daran gedacht das es C++ Programme gibt, die keine STL benutzen sondern nur templates und klassen, da diese Plattformunabhängig sind, während die STL dies nicht ist, sondern es immer nur Ports gibt?
Ist es nicht vielmehr so das die STL zum standard gehört und somit plattformunabhängig ist ?
Ist int denn portabel oder nicht eher plattformabhängig ?
-
Was ist bitte an std::string nicht plattformunabhängig?
Es gibt sogut wie gar nichts was man wirklich plattformunabhängig implementieren kann, überall muss man die Implementierung portieren und lässt die Schnittstelle gleich.
Sowas wie std::string muss man dann nichtmal portieren und dann kreidet man ihm plattformabhängigkeit an, böse :p
MfG SideWinder
-
@SideWinder
Ich hoff du kennst diese parameterliste beim GCC:
-ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions -ffast-mathWenn du Hardcore coding betreibst so wie ich bei uns in der Firma, wirst du um diese Parameter nicht umwegkommen, oder versuch du mal, ein Kassensystem zu coden als OS.
Dann wirst du sehen, das die STL nichts mehr mit portabel zu tun hat, da es ohne Stdlib nicht mehr geht, genauso wie exceptions und RTTI, der ganze schwachsinn braucht Runtime und die sind bekanntlich NICHT portabel.
-
Hab mich mit dem gcc noch nie sonderlich beschäftigt, benütze ihn nur nebenbei wenn wir unter Unix was programmieren müssen. Aber ich kann mir denken was die Parameter bedeuten.
Aber die Implementation von std::string des MSVC kann man imho 1:1 hernehmen und im gcc einsetzen, neu compilieren, fertig und schon hat man die Plattform ungewollt mitportiert.
Wenn ein C++-Programm im Kassensystem läuft kann ich dort auch eine Klasse basteln die mir auf meinen char* aufpasst
Ich kann mir ja vorstellen, dass ein cout/cin nicht funktioniert, weil die irgendwo in den tiefen Tiefen der STL des MSVCs mit WriteConsole()/ReadConsole() verbunden sind. Aber std::string
MfG SideWinder
-
SideWinder schrieb:
Hab mich mit dem gcc noch nie sonderlich beschäftigt, benütze ihn nur nebenbei wenn wir unter Unix was programmieren müssen. Aber ich kann mir denken was die Parameter bedeuten.
Aber die Implementation von std::string des MSVC kann man imho 1:1 hernehmen und im gcc einsetzen, neu compilieren, fertig und schon hat man die Plattform ungewollt mitportiert.
Wenn ein C++-Programm im Kassensystem läuft kann ich dort auch eine Klasse basteln die mir auf meinen char* aufpasst
Ich kann mir ja vorstellen, dass ein cout/cin nicht funktioniert, weil die irgendwo in den tiefen Tiefen der STL des MSVCs mit WriteConsole()/ReadConsole() verbunden sind. Aber std::string
MfG SideWinder
Wenn im inneren die stdlib benutzt wird, wirf mal nen Blick auf seine Parameter
-
Ja hallo
Wenns sein soll kann man basic_string auch ohne interner Verwendung der restlichen Standard-Library ausprogrammieren, aber ich versteh einfach nicht wieso er überhaupt die Standard-Library killt.
MfG SideWinder
-
weil die stdlib runtime benutzt und man bei einem Kassensystem kein OS hat mit stdruntime. Nach der zeit gewöhnt man sich derbst daran, keine STL mehr zu benutzen bzw. ne eigene STL.
-
nix da schrieb:
weil die stdlib runtime benutzt und man bei einem Kassensystem kein OS hat mit stdruntime. Nach der zeit gewöhnt man sich derbst daran, keine STL mehr zu benutzen bzw. ne eigene STL.
Ja obs dann ein eigene string-Klasse ist oder die Standardklasse ist ja im Endeffekt egal.
Aber es läuft auf eins hinaus: Lieber eine string-Klasse benützen als sich mit char* plagen
MfG SideWinder
-
das ist ansichtssache.