schleife zum einlesen von einem string
-
habe probleme mit der abbruchbedingung für die schleie. sie sollte nach den einlesen aller daten aus dem array aufhören, bzw. bei der letzten -99.
hier die funktion:
void einlesen(void)
{
char *str, *s, *p, bj[5];
int a= 0, i=1, j=1, cj=0, dj=0, ej=0, fj=0, test=0;while ( !feof(eingabe) )
{
fgetc(eingabe);
i++;
}
rewind(eingabe);if (( str = (char
malloc(i)) == NULL)
{
printf( "Nicht genug Speicher, um den Puffer zu allokieren\n");
exit(1);
}while ( !feof(eingabe) )
{
*(str+a)= fgetc(eingabe);
a++;
}rewind(eingabe);
**while ( !feof(eingabe) )
{// for()
// {
s= strstr(str, "-99");
a= s-str;if (( p = (char
malloc(a)) == NULL)
{
printf( "Nicht genug Speicher, um den Puffer zu allokieren\n");
exit(1);
}strncpy(p, str, a);
sscanf(p, "%s %d %d %d %d", bj, &cj, &dj, &ej, &fj);liste();
str= (str+a+4);
j++;
// }
}**
}der hört dann bei der if schleife auf und gibt dann,
Nicht genug Speicher, um den Puffer zu allokieren,
aus
bitte um hilfe
-
Benutze die
Tags und rücke es vernünftig ein. Ausserdem muss man bei C nur in den seltesten Fällen casten, z.b. Rückgabewert von malloc schonmal garnicht.
Edit: Ausserdem, hast du dir mal angeschaut, was "a= s-str;" für ein Wert ist?
Und wozu soll
while ( !feof(eingabe) ) im dickunterlegten Block tuen. Du benutzt eingabe garnicht.
-
[cpp]
void einlesen(void)
{
char *str, *s, *p, bj[5];
int a= 0, i=1, j=1, cj=0, dj=0, ej=0, fj=0, test=0;while ( !feof(eingabe) )
{
fgetc(eingabe);
i++;
}
rewind(eingabe);if (( str = (char
malloc(i)) == NULL)
{
printf( "Nicht genug Speicher, um den Puffer zu allokieren\n");
exit(1);
}while ( !feof(eingabe) )
{
*(str+a)= fgetc(eingabe);
a++;
}rewind(eingabe);
**while ( !feof(eingabe) )
{// for()
// {
s= strstr(str, "-99");
a= s-str;if (( p = (char
malloc(a)) == NULL)
{
printf( "Nicht genug Speicher, um den Puffer zu allokieren\n");
exit(1);
}strncpy(p, str, a);
sscanf(p, "%s %d %d %d %d", bj, &cj, &dj, &ej, &fj);liste();
str= (str+a+4);
j++;
// }
}**
}
[/cpp]
-
void einlesen(void) { char *str, *s, *p, bj[5]; int a= 0, i=1, j=1, cj=0, dj=0, ej=0, fj=0, test=0; while ( !feof(eingabe) ) { fgetc(eingabe); i++; } rewind(eingabe); if (( str = (char *) malloc(i)) == NULL) { printf( "Nicht genug Speicher, um den Puffer zu allokieren\n"); exit(1); } while ( !feof(eingabe) ) { *(str+a)= fgetc(eingabe); a++; } rewind(eingabe); while ( !feof(eingabe) ) { // for() // { s= strstr(str, "-99"); a= s-str; if (( p = (char *) malloc(a)) == NULL) { printf( "Nicht genug Speicher, um den Puffer zu allokieren\n"); exit(1); } strncpy(p, str, a); sscanf(p, "%s %d %d %d %d", bj, &cj, &dj, &ej, &fj); liste(); str= (str+a+4); j++; // } } }
-
Du sollst dir angucken, wie groß "a= s-str;" ist ... wenn der Wert 4665435534324265645 ist, ists ganz klar, dass der den Speicher nicht allocaten kann.