Array
-
Ich brauche Hilfe bei einem Array!
FILE* vdd=fopen("C:\\test.vdd","r"); int vdd_lines=0; char vdd_buffer[2048]; char *vdd_line[99999];
...
while(fgets(vdd_buffer, 2048, vdd)){ sprintf(vdd_line[vdd_lines],vdd_buffer); if((0 == stricmp("-dev",argv[1]))){ printf(vdd_buffer); } vdd_lines++; }
in vdd_line[0] => letzte Zeile der Datei, obwohl da eigentlich die erste stehen müsste!
in vdd_line[1] => auch die letzte Zeile der datei, und so geht das weiter, überall steht die letzte Zeile der Datei drin!kann man ein array nicht mit einem int erhöhen, oder wo liegt der Fehler?
Hätte gerne eine verbesserte Version, wenns geht!
MfG,
C++ Core
-
Aus deinem Namen schließ ich mal, dass du eine C++-Lösung suchst
#include <iterator> #include <algorithm> #include <vector> #include <fstream> #include <string> using namespace std; ifstream file("foo.txt"); istream_iterator<string> in(file), eos; vector<string> vec; copy(in, eos, back_inserter(vec));
Das ist mein persönlicher Favorit.
Bei deinem C-Code kann ich dir nicht weiterhelfen.
-
Ansonsten geht auch noch folgendes:
#include <string> #include <fstream> using namespace std; string foo; ifstream file("foo.txt"); while(file) { getline(file, foo); foo += "\n"; }
Auf char und Arrays für Zeichenketten würd ich in C++ wenn möglich vollständig verzichten.
-
C++ Core schrieb:
Ich brauche Hilfe bei einem Array!
char *vdd_line[99999];
Daran liegts und wie du damit weiter arbeitest. Hier hast du einen Zeiger auf einen Bereich der 99999 Byte belegt. Also erstes würde ich mal die Zahl begrenzen. Da du eh nur 2048 Zeichen pro Zeile einliest, brauchst du auch nur soviele. Dann kommen wir zu dem Zeiger. Wenn du mehrere davon willst, dann musst du auch Speicher dafür reservieren.
Mein Vorschlag:
char ** vdd_line; ... //wenn du vorher schon weißt wieviel Zeilen du hast vdd_line = malloc(anzahl_zeilen * sizeof(char *)); ... //wenn du das dynamisch willst vdd_line = realloc(vdd_line, anzahl_zeilen * sizeof(char *)); //wobei anzahl_zeilen hier die momentane Anzahl der Zeilen ist, //die du bisher eingelesen hast. Das hier muss natürlich in deine Einlese-Schleife ... //Dazu kommt natürlich noch das Reservieren des Speichers für deine 2048 Zeichen vdd_line[anzahl_zeilen-1] = malloc(2048);