Datum:
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
Datum:
es geht nicht, ein array hat keine Größenangabe in C. Es dem grund muss man die Größe immer mit übergeben. Da du aber scheinbar strings varbeiten willst, dann kannst du mit zum 0 byte lesen.
void Display(char* text) { while( *text ) { IOW24Out(0x0300+ *text); Sleep(1); IOW24Out(0x0100+ *text); Sleep(1); *text++; } fflush(stdout); } |
Datum:
man strlen HTH
Datum:
icecandle schrieb: > void Display(char text []){ > > int max= (sizeof(text) / sizeof(text[0])); Das geht so nicht. Du musst die Länge des array mit übergeben:
void Display(char text [], uint8_t length) ... Display("123456", sizeof("123456")); ... |
Datum:
es funktioniert endlich :DD Vielen Dank !! und wieso hat das mit integer werten immer funktionier ?
Datum:
icecandle schrieb: > und wieso hat das mit integer werten immer funktionier ? keine ahnung, da wir da keine code gesehen haben.
Datum:
icecandle schrieb: > wieso hat das mit integer werten immer funktionier Weil die Größe (Bits) bekannt ist. Du hast oben ein offenes array übergeben. Zeige bitte Deine Lösung.
Datum:
die lösung:
void Display(char* text){ while( *text ) { IOW24Out(0x0300+ *text); Sleep(1); IOW24Out(0x0100+ *text); Sleep(1); *text++; } } |
Datum:
Ok, Danke! Aber nie die Nullterminierung vergessen!
Datum:
Beim *text++; ist der * zu viel. Du willst ja nur den Zeiger weiterstellen und nicht auf den Wert zugreifen. Das mit dem sizeof funktioniert da, wo du das Array auch definiert hast.
Datum:
big size schrieb: > icecandle schrieb: >> wieso hat das mit integer werten immer funktionier > > Weil die Größe (Bits) bekannt ist. Du hast oben ein offenes array > übergeben. Was soll denn ein "offenes Array" sein? Er hat einen Zeiger übergeben, und dessen Größe ist auch bekannt und auf seinem System offenbar 4 Bytes groß. Merke: Man kann Arrays nicht direkt an Funktionen übergeben. icecandle schrieb: > void Display(char text []){ Ach wenn's auf den ersten Blick so aussieht, ist text hier kein Array, sondern ein Zeiger.
Datum:
Rolf Magnus schrieb: > Er hat einen Zeiger übergeben, > und dessen Größe ist auch bekannt und auf seinem System offenbar 4 Bytes > groß. > Merke: Man kann Arrays nicht direkt an Funktionen übergeben. und was kommt dann bei den beiden sizeof () raus:
void Display(char text []){ int max= sizeof(text); ... // und void Display(char text [128]){ int max= sizeof(text); ... |
Datum:
big size schrieb: > und was kommt dann bei den beiden sizeof () raus: beides mal sizeof(void*)
Datum:
Peter II schrieb: > beides mal sizeof(void*) Um genau zu sein: sizeof(char*) big size schrieb: > void Display(char text []){ Das ist zu 100% äquivalent zu:
void Display(char* text){ |
Bei Funktionsparameteren haben die eckigen Klammern nicht die übliche
Bedeutung.
> void Display(char text [128]){
Das ist genau das gleiche wie oben. Die 128 werden vom Compiler einfach
ignoriert.