Größe eines char arrays funktioniert nicht..



  • Guten Tag!
    Ich weiß einfach nicht mehr weiter...
    Wie bestimmt man jetzt genau die Größe eines char arrays, ich versuche es schon die ganze Zeit, die Größe ist bei mir immer 4 -.-

    void Display(char text []){
    
    	int max= (sizeof(text) / sizeof(text[0]));
    	int i=0;
    
    	for(i=0; i<=max; i++){
    
    		IOW24Out(0x0300+ text[i]);
    		Sleep(1);
    		IOW24Out(0x0100+ text[i]);
    		Sleep(1);
    	}
    
    	printf("%i", max);
    	fflush(stdout);
    }
    

    Das wär mal die Funktion

    Der Aufruf: Display("ABCDEFG");

    Das ganze soll an einem LCD-Display angezeigt werden, leider werden nur die ersten 5 Zeichen angezeigt, das Display kann man zu 100% als Fehlerquelle ausschließen, das Problem liegt bei der falschen Größenbestimmung des arrays

    Ich hoffe ihr könnt mir weiterhelfen 🙂



  • Bei der Übergabe als Parameter zerfällt das Array in einen Zeiger. Und auf einem 32-Bit System ist ein Zeiger eben 32 Bit = 4 Byte groß.

    EDIT: Ich seh grad, dass das Ding wahrscheinlich auf einem Microcontroller läuft. Da wäre es möglich, dass das Speicher-Management etwas anders funktioniert; trotzdem sind die Zeiger hier wohl 32 Bit groß. Welchen Controller verwendest du denn?

    BTW: sizeof(char) ist immer 1, das garantiert dir der Standard. Wozu dann durch 1 teilen?



  • Bei den Namen Display und text , nehme ich an das du auch Text darstellen willst.

    Da das ein String sein soll, kannst du entweder strlen() nehmen oder alles bis zum Zeichen '\0' ausgeben.

    Das "ABCDEFG" ist ein Stringliteral, bei dem automatisch das '\0' als Endekennung angehängt wird.

    C-Grundlagen.



  • icecandle schrieb:

    Guten Tag!

    Guten Abend.

    icecandle schrieb:

    Ich weiß einfach nicht mehr weiter...

    Ich schon.

    icecandle schrieb:

    void Display(char text []){
    
    	int max= (sizeof(text) / sizeof(text[0])); /* <- für deinen Anwendungsfall nimm besser strlen(text) */
    	int i=0;
    
    	for(i=0; i<=max; i++){ /* <- muss heißen: for(i=0; i<max; i++) sonst durchläufst du auch das abschließende '\0' */
    
    		IOW24Out(0x0300+ text[i]);
    		Sleep(1);
    		IOW24Out(0x0100+ text[i]);
    		Sleep(1);
    	}
    
    	printf("%i", max);
    	fflush(stdout);
    }
    

Anmelden zum Antworten