On Mon, Jan 14, 2002 at 06:13:07PM +0100, Steffen Liebergeld wrote:
hier kommt das erste kleine C++ Problem für diese Woche:
Willst Du C++ machen, oder C? Viele Teile Deines Programmes sehen aus eher wie C. Will nicht sagen, daß das verkehrt ist, aber es macht Dir eventuell das Leben unnötig schwer.
Ich möchte aus einer Datei eine Zahl einlesen. Also habe ich ersteinmal den Betreffenden Bereich der Datei in ein char Array geschrieben, was ja auch
{ char RAM[8];
Nun, ich habe das Gefühl, Du liest ein Zeichen zu viel ein. "char RAM[8]" schafft Dir ein Array von 8 Zeichen, also Index 0 bis 7. Du liest dann aber mit i von 0 bis i <= 8, also ist i irgendwann auch mal 8, und Du liest dann immer noch ein, also nach RAM[8], das gibt's aber nicht mehr. Glückssache, wenn das funktioniert:
for(int i=0; i<=8; i++) { RAM[i] = fgetc(ptr); cout << RAM[i]; }
"Off by one" wird gern genommen ;-)
Hier ist mal eine Alternative:
#include <iostream> #include <fstream> #include <string>
using namespace std;
const string MEMFILE = "/proc/meminfo";
int main(int argc,char **argv) { int size = 0; string unit;
ifstream memfile(MEMFILE.c_str()); cout << MEMFILE << endl;
// Ich nehme an, Du willst die Zeile mit MemTotal haben. // Da ich mir nicht sicher wäre, daß das immer an Position 166 // losgeht (bei mir z.B. nicht, weil ich mehr Speicher habe), würde // ich entweder bis Zeile 4 lesen und mich dann beginnen zu kümmern, // oder noch flexibler, ich würde so lange Worte lesen, bis ich // "MemTotal:" finde, und dann davon ausgehen, daß das nächste Wort // die Speichergröße ist.
string current; while (memfile >> current) { if (current == "MemTotal:") { memfile >> size >> unit; break; } }
if (!size) { cerr << "Offenbar kein Speicher vorhanden." << endl; exit(1); }
cout << "Größe: " << size << " " << unit << endl;
return 0; }
// vim:sts=4 sw=4 aw ai sm: