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.


Anmelden zum Antworten