Problem bei der Auswertung einer Log-Datei - oder der längste String der Welt
-
Erstmal Hallo
Bin neu hier, der Götz und versuche mich nach einer Kindheit (schon was her) mit Pascal seit einiger Zeit mit C++. Find's auch recht fein, nach den anfänglichen Kämpfen mit den "bitchy strings" usw...
Derzeit arbeite ich an einem recht simplen Ding: Einen console.log analyzer für Quake III, der gleich die Datei für das Ranking auf der Webpage generiert. So, nun aber zur Sache:
Quake ist recht gesprächig. Es schreibt in die log-Datei stellenweise Zeilen mit über 2000 Zeichen. Ich lese diese Datei mit der getline function aus, und habe - wie orginell - ein char[256] array benützt. Das hat den MS VC++ 6.0 Compiler jedoch veranlasst nach einer dieser Zeilen pausenlos nichts aus der Datei zu lesen, wodurch "while (!logdatei.eof())" zur Endlosschleife wird. Meine "Lösung" war das Chararray 2100 Einheiten weit zu definieren. Klappt auch. Aber das stört mich schon. Wer zum Teufel definiert derartig große arrays ohne Grund?
Weiß jemand einen eleganteren Weg? (Nein, auf Quake verzichten kommt nicht in Frage
)
-
Wie wärs mit dynamischer Speicherallokation?
-
std::string
-
Vielen Dank
das hört sich jetz arg nach Anfänger an:
1.Wie funktioniert dynamische Speicherallokation (Snippet?)
2.mit "echten" strings kann ich net lesen:
error C2664: 'class std::basic_istream<char,struct std::char_traits<char> > &__thiscall std::basic_istream<char,struct std::char_traits<char> >::getline(char *,int)' : cannot convert parameter 1 from 'class std
::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called3.Kennt jemand den Grund für das Problem? Hängt das mit dem standartmäßig eingestellten "/n" als delimiter zusammen?
-
string deinString;
deinString.c_str()
konvertiert zum chararry.
vergiss nicht,
#include <string> using namespace std;
-
Götz schrieb:
Vielen Dank
das hört sich jetz arg nach Anfänger an:
1.Wie funktioniert dynamische Speicherallokation (Snippet?)
Schau dir einfach new/delete an.
Götz schrieb:
2.mit "echten" strings kann ich net lesen:
error C2664: 'class std::basic_istream<char,struct std::char_traits<char> > &__thiscall std::basic_istream<char,struct std::char_traits<char> >::getline(char *,int)' : cannot convert parameter 1 from 'class std
::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be calledwww.cppreference.com/cppstring/getline.html
Götz schrieb:
3.Kennt jemand den Grund für das Problem? Hängt das mit dem standartmäßig eingestellten "/n" als delimiter zusammen?
Ist kein Problem, s.o. - und vor allem ist standardmäßig '****n' Delimiter.
-
elise schrieb:
string deinString;
deinString.c_str()
konvertiert zum chararry.
In einen const char* kann man aber nicht allzu viel reinschreiben
-
ich habe nur gegen die fehlermeldung eine medizin gesucht
-
fein
mit den Strings bin ich jetzt nicht mehr auf Kriegsfuß...und ins dynamische muss ich nochmal Zeit investieren.
Ich danke für die schnelle und zahlreiche Hilfe
-
elise schrieb:
ich habe nur gegen die fehlermeldung eine medizin gesucht
Stimmt, "cannot convert const char * to char *" sieht nicht mehr ganz so erfurchtgebietend aus wie das basic_string-Template
-
dann freu dich doch einfach.