-simonho-
Cadet 4th Year
- Registriert
- Juli 2012
- Beiträge
- 119
Hallo an alle,
folgender Code soll durch Eingabe von einer Anzahl Einwohnern und einem Bundesland alle Städte auflisten und in eine Datei schreiben, die mehr Einwohner hat als eingegeben wurden. Die Daten dafür werden vorher aus einer Datei eingelesen.
Der Code funktioniert soweit mit einer Ausnahme. Und zwar wird in *result[] nur ein Pointer auf den zu speichernden String gespeichert, weshalb void write_file(char *result[], int len) immer nur die letzte Stadt übernimmt und in die Datei schreibt.
Die Werte des Strings s werden bei jedem Schleifenaufruf überschrieben.
Wie kann ich dieses Problem am besten lösen, ohne auf Vorrat ganz viele Strings zu deklarieren?
Viele Grüße -simonho-
folgender Code soll durch Eingabe von einer Anzahl Einwohnern und einem Bundesland alle Städte auflisten und in eine Datei schreiben, die mehr Einwohner hat als eingegeben wurden. Die Daten dafür werden vorher aus einer Datei eingelesen.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "input3.h"
/* Die Konstanten:
* int MAX_LAENGE_STR - die maximale String Länge
* int MAX_LAENGE_ARR - die maximale Array Länge
* sind input3.c auf jeweils 255 und 100 definiert
*/
int main(int argc, char **argv) {
if (argc < 3) {
printf("Aufruf: %s <anzahl> <bundesland>\n", argv[0]);
printf("Beispiel: %s 100 Bayern\n", argv[0]);
printf("Klein-/Großschreibung beachten!\n");
exit(1);
}
int anzahl = atoi(argv[1]);
char *bundesland = argv[2];
// Statisch allokierter Speicher
char staedte[MAX_LAENGE_ARR][MAX_LAENGE_STR];
char laender[MAX_LAENGE_ARR][MAX_LAENGE_STR];
int bewohner[MAX_LAENGE_ARR];
int len = read_file("staedte.csv", staedte, laender, bewohner); //read_file liest die Datei staedte.csv und überträgt die Daten in die Arrays
//staedte, laender und bewohner
char *result[MAX_LAENGE_ARR];
int c = 0; //zählt die Anzahl der Städte mit genug Einwohnern im jeweiligen Bundesland
char s[100];
for (int i = 0; i < MAX_LAENGE_ARR; i++)
{
if (bewohner[i]>=anzahl && strncmp(bundesland,laender[i], MAX_LAENGE_STR) ==0 )
{
snprintf(s, 1000, "Die Stadt %s hat %d Einwohner.", staedte[i], bewohner[i]);
result[c] = s;
c++;
}
}
write_file(result, c);
// Mithilfe von write_file(...) soll das Ergebnis in die "resultat.txt"
// geschrieben werden.
// Dynamisch allozierter Speicher muss hier freigegeben werden.
}
Der Code funktioniert soweit mit einer Ausnahme. Und zwar wird in *result[] nur ein Pointer auf den zu speichernden String gespeichert, weshalb void write_file(char *result[], int len) immer nur die letzte Stadt übernimmt und in die Datei schreibt.
Die Werte des Strings s werden bei jedem Schleifenaufruf überschrieben.
Wie kann ich dieses Problem am besten lösen, ohne auf Vorrat ganz viele Strings zu deklarieren?
Viele Grüße -simonho-