dynamisch einlesen



  • kann ich da jetzt machen:

    Fertig = (char *) malloc(100);
    strcat(Fertig, "blablablabla...");//100 zeichen einlesen
    Fertig = (char *) malloc(100);
    strcat(Fertig, "bloblobloblo...");//noch 100 zeichen??
    

    mfg saroll 🤡 🤡



  • @Saroll, Memoryleak detected :p

    long lAllocLn = <Länge der Daten>;
    char *pData = malloc( lAllocLn );
    strcpy( pData, "123456789" );
    pData = realloc( lAllocLn + <Länge der neuen Daten> );
    strcpy( &pData[lAllocLn], "123456789" );
    lAllocLn += <Länge der neuen Daten>;
    pData = realloc( lAllocLn + <Länge der neuen Daten> );
    strcpy( &pData[lAllocLn], "123456789" );
    lAllocLn += <Länge der neuen Daten>;
    ...
    ...
    ...
    


  • @Herrmann
    Du hast das free() am Schluss vergessen 😉



  • @AJ, und ausgerechnet ich werfe Saroll Memoryleaks vor 🙄 peinlich 🙂



  • hallo

    kann ich das auch mit strcat dranhängen oder nur mit strcpy an die position wo es ist??



  • hallo!!

    hab ein grooooßes problem:

    long Anzahl=100;
    char *Fertig = malloc ( Anzahl );
    

    Compiler schrieb:

    [C++Fehler] lis2psc.cpp(15): Cannot convert 'void *' to 'char *'.

    Fertig=realloc(Anzahl+29);
    

    Compiler schrieb:

    [C++Fehler] lis2psc.cpp(56): Could not find a match for 'std::realloc(long)'.

    helft mir bitte 😞 😞 🤡🤡



  • /edit: Upps, war Müll.



  • so hab das mal gemacht aber irgendwie funkt das mit dem eintragen nicht
    hier mal ein bissi von meinem source:

    Fertig=(char*)realloc(Fertig,Anzahl+32);
    strcpy( &Fertig[Anzahl], "90 rotate 1000 20 translate " );
    Anzahl+=32;
    

    ich hab mal Anzahl ausgegeben und es kommt die zahl:
    3.078281318465951102000000000000000000000e+73
    bei herrmanns beispiel kommt bei der ausgabe raus:
    0.000000

    es kommt kein fehler aber in Fertig steht nie etwas drinnen...
    woran liegt das??



  • @Saroll, du musst das selbstverständilich nicht mit strcpy machen. War halt nur ein Vorschlag 🙂

    Hier mal ein kleines Beispiel mit strcat. Das folgende Programm erzeugt einen Puffer um die eingegebenen Daten dort hineinzuschreiben. Bei der nächsten Eingabe wird der Puffer erweitert und die Daten an die bereits existieren angehängt. Hoffe das es zum Verständnis etwas hilft.

    #include <stdio.h>
    #include <malloc.h>
    
    int main ( void )
    {
      char cInput[256];
      char *pBuffer = 0;
      long lLength = 0;
    
      while ( 1 )
      {
        gets( cInput ); /* Eingabe einlesen */
        if ( !pBuffer ) /* Überprüfen ob Puffer existiert */
        {
          /* Neuen Puffer erstellen */
          pBuffer = malloc( strlen( cInput ) +1 );
          lLength = strlen( cInput ) +1; /* +1 wegen des Terminators */
        }
        else
        {
          /* Existierenden Puffer erweitern */
          pBuffer = realloc( lLength +strlen( cInput ) );
          lLength += strlen( cInput );
        };
        /* Daten an den Puffer anhängen */
        strcat( pBuffer, cInput );
        /* Terminator setzen -- WICHTIG sonst funktioniert 
           strcat beim nächsten Mal nicht mehr. */
        pBuffer[lLength-1] = '\0';
      };
    
      return 0;
    };
    

    Hoffe, dass ich keine Fehler eingebaut habe.

    PS: Ich weiß die Endlosschleife ist nicht unbedingt super und am Ende muss pBuffer auch noch zerstört werden aber für Saroll sollte es erstmal reichen 🙂



  • hallo!!
    danke herrmann!!
    du hast mir extrem geholfen!!
    aber ich habe noch eine frage an dich(und an alle anderen), ich habe das prog jetzt fertig aber es ist ziemlich rechenintensiv und braucht mehrere MB arbeitsspeicher...
    hier ist der source: zum download www.ants-world.com/lis2psc.cpp

    vielleicht wenn der code irgendwie kleiner gemacht werden kann??
    oder das es nicht so arbeitsintensiv ist?!

    danke schon vorher!!
    mfg saroll 🤡 🤡

    ps: das ist mein hunderster beitrag 🤡 😋


Anmelden zum Antworten