atoi()...funktioniert irgendwie nicht....



  • 🙄 Ich bin eine Knalltüte.... 🙄
    Sorry wegen dem Dummen Fehler, der war richtig 👎 👎 👎
    Ich werde erstmal den Beitrag oben editieren!

    Jetzt kompiliert er zwar richtig aber er gibt mir immer noch die chars raus.
    Weisst Du zufällig warum...und wenn es wieder solch ein Fehler ist, dann *KlickKlick*---------> *Peng*



  • krasser code
    vor allem falscher code....
    zu Atio:

    atoi - convert a string to an integer.
    SYNOPSIS
    #include <stdlib.h>

    int atoi(const char *nptr);

    Das ist eine Funktion, die ein int zurückliefert und die einen zeiger auf einen char erwartet. du übergibts keinen zeiger sondern nur einen char und du speicherst den rückgabewert nicht.
    das müsste heisen:

    werte[i] = atio(&bmpContent[i]);
    

    und dann später

    return werte;
    

    wobei du werte als array ersrtellt hast

    int werte = new int[bmpSize];
    

    musst du aber später auch wieder freigeben mit delete[] werte;
    Dein char *bmpContent = new char[bmpSize]; haste ja noch nichtmal freigegeben, da haste ein speicherlag.



  • DEvent schrieb:

    das müsste heisen:

    werte[i] = atio(&bmpContent[i]);
    

    Genau. Vergiss diese alberne Geschichte mit der Nullterminierung. Hauptsache der Compiler hält das Maul 😮



  • wahh woher kommen all die posts auf einmal?

    HumeSikkins hat recht, atoi ist überflüssig bei nur einem char

    also statt werte[i] = atoi(&bmpContent[i]);
    kannste auch werte[i] = bmpContent[i] - '0';

    und bmpContent musste natürlich auch freigeben mit delete[]
    (vorzugweise bevor du return werte machst :p )



  • DEvent schrieb:

    vor allem falscher code....
    zu Atio:

    atoi - convert a string to an integer.
    SYNOPSIS
    #include <stdlib.h>

    int atoi(const char *nptr);

    Wenn schon, dann #include <cstdlib>



  • wenn dann #include <stdlib> :p



  • DEvent schrieb:

    wenn dann #include <stdlib> :p

    😮 😕



  • Also Leute,
    Ich dankle euch schon mal sehr für eure schnelle hilfe und ich entschuldige mich schon einmal sehr für meine RIESENGROSSEN DUMMEN Fehler aber ich taste mich an die meiste Dinge ran 😞 😞 😞

    Nun habe ich den Code soweit geändert:

    #include "stdafx.h"
    #include <stdlib.h>
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    char SaveBitmap(int c){
    
      FILE *bmpFile;
      long bmpSize;
    
      bmpFile = fopen ( "picture.bmp" , "rb" );
    
      fseek (bmpFile , 0 , SEEK_END);
      bmpSize = ftell (bmpFile);	
      rewind (bmpFile);						
    
      char *bmpContent = new char[bmpSize];
      int *value = new int[bmpSize]; 
    
        if(bmpFile!=NULL){	
    
    		for (int i=0; i<bmpSize; i++){        
    			bmpContent[i] = fgetc (bmpFile);				
    			value[i] = bmpContent[i]-'0';
    		} // end for	
    
        } // end if
    	else{
                 printf("Error opening file!\n");  
    	} // end else
    
      fclose (bmpFile);
      delete[] bmpContent;
    //  delete[] value;
      return value[c];
    } //end function SaveBitmap
    
    void main(){ 
    	cout << SaveBitmap(2);
    } //end main
    

    @ MaSTaH : Ich finde die zusätzlichen Bemerkungen einfach nützlich und macht grösseren Code einfach überschaubarer!...finde ich 🙂



  • Scorn schrieb:

    delete[] value;
      return value[c];
    

    Stocherst du gern in Toten rum?



  • Habs gerade auch gesehen...schon geändert (ich 🤡) , trotzdem bekomme ich nun Sonderzeichen heraus und keine Integerwerte...



  • das sind doch die integerwerte halt als char
    du musst ja unbedingt ein char zurückgeben anstatt eines anständigen integers



  • Shlo schrieb:

    DEvent schrieb:

    wenn dann #include <stdlib> :p

    😮 😕

    wo isn da das problem?



  • DEvent schrieb:

    Shlo schrieb:

    DEvent schrieb:

    wenn dann #include <stdlib> :p

    😮 😕

    wo isn da das problem?

    Z.B. das es keinen solchen Header gibt. Zumindest keinen Standard-Header. Entweder stdlib.h oder cstdlib.



  • ich dacht das wär standart lib ( edit: Hää? wieso ist da eine zensur? )
    weil es heist stdlib 😉 naja egal, aufjenden fall include ich das immer so ohne probleme #include <stdlib>



  • Alles klar 😃 ,

    Soweit funktioniert es 😃 !Danke euch!

    Aber eine kleine Frage habe ich noch: Hat einer von euch ne Seite, wo wirklich jede Umwandlung in andere Datentypen erklärt ist.
    Ich habe zwar schon soweit atoi etc.....gesehen aber vielleicht hat einer ja eine super erklärende Seite 😃

    Danke nochmal 🙂 🙂



  • DEvent schrieb:

    ich dacht das wär stan**** lib ( edit: Hää? wieso ist da eine zensur? )
    weil es heist stdlib 😉 naja egal, aufjenden fall include ich das immer so ohne probleme #include <stdlib>

    Der Header heißt cstdlib, Punkt. Alles andere ist nicht portabel bzw. standardkonform.


Anmelden zum Antworten