grosse Dateien lesen
-
SeppJ schrieb:
Höchstens in C und dort auch nur aus Bequemlichkeit, nicht wegen mangelnder Möglichkeiten.
Immer diese C-Basherei (den schlechtesten C-Code liest man hier im C++-Forum). In C ist die Bequemlichkeit mit getline auch gegeben. Trotzdem interpretiert man den Input oft gleich direkt vom FILE*.
-
-
SeppJ schrieb:
unbash schrieb:
In C ist die Bequemlichkeit mit getline auch gegeben.
Fail.
?
char *line=NULL; size_t bytes=0, len=0; while (getline(&line, &len, stdin)>=0) bytes += len; free(line); printf ("%zu\n", bytes);vs
std::ios_base::sync_with_stdio(false); std::string s; std::size_t bytes = 0; while (std::getline(std::cin, s)) bytes += s.size(); std::cout << bytes << '\n';Gleich bequemer Code und die C-Version ist erst noch schneller. Wo ist hier das Fail?
-
unbash schrieb:
Wo ist hier das Fail?
Es ist kein C.
-
Ok,danke, hat mir sehr geholfen
-
SeppJ schrieb:
unbash schrieb:
Wo ist hier das Fail?
Es ist kein C.
Doch:
Since many programs interpret input on the basis of lines, it is convenient to have functions to read a line of text from a stream. Standard C has functions to do this, but they aren't very safe: null characters and even (for gets) long lines can confuse them. So the GNU C Library provides the nonstandard getline function that makes it easy to read lines reliably.Ist aber nicht Standart-C, also irrelevant.
EDIT: Warum wird das zensiert?
-
IrgendeinName schrieb:
Ist aber nicht stan****-C, also irrelevant.
EDIT: Warum wird das zensiert?
Guck mal in den Duden.
Edit:
Oder auch hier:
http://lexikon.martinvogel.de/standart.html
-
IrgendeinName schrieb:
Ist aber nicht stan****-C, also irrelevant.
EDIT: Warum wird das zensiert?
Weil selbst das Forum erkennt, dass das eine dumme Aussage ist. Das ist unportables GNU-Zeugs, kein reines C. getline kann man im Linuxprogrammierungsforum als gescheite Antwort bringen, nicht in den ANSI-Sprachforen.
Es ist ja nicht so, dass man für so ein getline jahrelange Erfahrung in der Entwicklung bräuchte, trotzdem sieht man kaum C-Code, in dem Funktionen dieser Art benutzt werden. Bequemlichkeit, denn ganz so trivial ist es nun einmal doch nicht.
-
Belli schrieb:
IrgendeinName schrieb:
Ist aber nicht stan****-C, also irrelevant.
EDIT: Warum wird das zensiert?
Guck mal in den Duden.
Edit:
Oder auch hier:
http://lexikon.martinvogel.de/stan****.htmlRechtschreibfehler zensieren? Obskure Methoden...
SeppJ schrieb:
Weil selbst das Forum erkennt, dass das eine dumme Aussage ist. Das ist unportables GNU-Zeugs, kein reines C. getline kann man im Linuxprogrammierungsforum als gescheite Antwort bringen, nicht in den ANSI-Sprachforen.
Es ist ja nicht so, dass man für so ein getline jahrelange Erfahrung in der Entwicklung bräuchte, trotzdem sieht man kaum C-Code, in dem Funktionen dieser Art benutzt werden. Bequemlichkeit, denn ganz so trivial ist es nun einmal doch nicht.
Ich habe selbst gesagt, das es nicht im Standard ist.
Aber du hast Wort auf Wort gesagt, das die mit Link hinterlegte Funktion kein C sei, obwohl sie es ist. Sie ist nicht Standard C, aber C.
Sie scheint das Problem des TE gelöst zu haben und ich glaube dem ist Portabilität recht egal.
-
ich hab da noch eine Frage:
anstatt ein char array 1024 zu verwenden, kann ich also uch einfach ein char array verwenden,oder?
-
alterbro schrieb:
ich hab da noch eine Frage:
anstatt ein char array 1024 zu verwenden, kann ich also uch einfach ein char array verwenden,oder?Erklär bitte (Code?), was genau du damit meinst?
IrgendeinName schrieb:
Aber du hast Wort auf Wort gesagt, das die mit Link hinterlegte Funktion kein C sei, obwohl sie es ist. Sie ist nicht Standard C, aber C.
Was hilft eine non-standard C Lösung in einem Standard C++ Forum!? Abgesehen davon, ist diese getline() Funktion wohl die hässlichste Lösung, die ich je gesehen hab...
-
alterbro schrieb:
ich hab da noch eine Frage:
anstatt ein char array 1024 zu verwenden, kann ich also uch einfach ein char array verwenden,oder?Du kannst auch einfach einen std::string verwenden. Die Laenge der Zeile muss nicht vorher bekannt bzw. festgelegt sein.
-
ok, danke