Erste Stringfunktion



  • Guten Morgen miteinander,

    also ich mach grad die ersten gehversuche mit C, und hoffe ihr könnt mir weiterhelfen. Hab eine char* function aufgebaut und es lässt sich soweit compilieren. Der rückgabewert ist jedoch nicht 0 und das ist natürlich nicht gut. Vlt könnt ihr mir einpaar tipps geben wie es richtig und besser geht:

    char *intobin32( char *str, int zahl)
    {
             str = (char *)malloc(sizeof(char)*33);
    	int i;
    	for( i = 0; i < 32; i++){
    		str[i] = '0';
    	}
    
    	str[i+1] = '\0';
    	i = 31;
    
    	while(zahl != 0){
    		if(zahl%2 == 0)
    			str[i] = '0';
    		else
    			str[i] = '1';
    		zahl = zahl/2;
    		i--;
    	}
    	return str;
    
    }
    
    void main() 
    {
       	char *ptr;
    	int zahl = 266;
       	ptr = intobin32( *ptr, zahl);
       	printf("%s\n", ptr);
    	free(ptr);	
    }
    

    vielen Dank im Voraus



  • - Deppen-malloc-Cast
    - void main
    - Zeile 10+9 gehören getauscht
    - malloc gehört nicht in die Funktion
    - int braucht nicht 32 Bit groß zu sein



  • Hallo Wutz,

    was meinst du mit deppen-malloc-cast?
    void main ist nicht korrekt?
    malloc ist deshalb innerhalb der funktion, weil ich die größe aus der Funktion heraus bestimmen möchte.


  • Mod

    Zeile 1: Darf die Zahl denn auch negativ sein?
    Zeile 1: Warum lässt du dir einen char* übergeben, dem du dann sofort einen neuen Wert zuweist?
    Zeile 2: Es ist keine gute Idee, aus Funktionen etwas ge-malloc-tes zurück zu geben. Lass dir vom Aufrufer etwas passendes geben.
    Zeiel 2: Wozu der Cast?
    Zeile 2: sizeof(char)==1, per Definition
    Zeilen 5-7: memset
    Zeile 9: Index out of bounds
    Zeile 24: int ist der einzig portable Rückgabetyp für main.

    Zusammengefasst: Sieht irgendwie so aus, als hättest du dir irgendwo abgeguckt, wie eine solche Funktion aussehen könnte, aber nicht wirklich verstanden, was du gesehen hast.



  • Nein der code ist nicht kopiert wie gesagt Es sind die ersten Versuche in c. Dafür schreibe ich ja rein.
    Mein Sinn war es die Größe des Datenbereichs für den String zu bestimmen und das von der Funktion aus, wenn du sagst es ist keine gute Idee ist, dass ein guter Tipp für mich. Ja ich habe den Inhalt der Funktion auch nur halbherzig geschrieben weil ich die Funktionen und aufrufe für char Arrays (bzw auch den Umgang mit Pointern) erlernen möchte.

    Aber gleich als Depp dahingestellt zu werden habe ich nicht erwartet würde ja nicht um Hilfe bitten wenn ich es könnte.


  • Mod

    Kakarott** schrieb:

    Aber gleich als Depp dahingestellt zu werden habe ich nicht erwartet würde ja nicht um Hilfe bitten wenn ich es könnte.

    Nicht persönlich nehmen. Der Umgangston mag grob klingen, ist aber normalerweise sachlich gemeint. Vielleicht nicht bei allen, aber bei den meisten. Das "Deppen-Cast" ist als Analogie zum Deppenapostroph gemeint, als etwas unnötiges, was von Leuten ohne Hintergrundwissen überall gesetzt wird, wo es nicht hin gehört, weil sie es mal irgendwo gesehen haben, wo es cool und wichtig aussah.



  • Ok wenn das so ist, an den Jargon kann ich mich gewöhnen 🙂
    Naja Danke für die zahlreichen tipps lernen kann man nur wenn man fehler macht.



  • Sei nicht so mimosenhaft, du hast Hilfen angefordert und sie bekommen,
    und irgendwo musst du den Deppen-Cast ja aufgeschnappt haben, von wegen 'nirgendwoher kopiert'. Kein normaler Mensch kommt darauf, in C Pointer zu casten, das ist alles nur Aberglaube und kritikloses Übernehmen von Tutorials, Professoren u.ä. Leuten mit beschränktem Horizont.



  • Wenn man allerdings darauf besteht, dass die eigene Anwendung auch durch einen C++ Compiler kompiliert werden kann braucht man den Cast.

    Cairo und SDL fallen mir auf die Schnelle ein, die einige Längen gehen (schlimmer noch als dieser Cast), damit Leute den Micorosoft Compiler nutzen können. 😞

    Wenn Du nicht Visual C++ benutzt, gibt's aber keinen Grund für den Cast.



  • Furble Wurble schrieb:

    damit Leute den Micorosoft Compiler nutzen können. 😞

    Auch der kann C ...


Anmelden zum Antworten