char array Größenbestimmung

Gast #2665109
Lesenswert?

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 -.-
1
void Display(char text []){
2

3
  int max= (sizeof(text) / sizeof(text[0]));
4
  int i=0;
5

6
  for(i=0; i<=max; i++){
7

8
    IOW24Out(0x0300+ text[i]);
9
    Sleep(1);
10
    IOW24Out(0x0100+ text[i]);
11
    Sleep(1);
12
  }
13

14
  printf("%i", max);
15
  fflush(stdout);
16

17
}
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
Gast #2665113
Lesenswert?

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.
1
void Display(char* text) {
2

3
  while( *text ) {
4
    IOW24Out(0x0300+ *text);
5
    Sleep(1);
6
    IOW24Out(0x0100+ *text);
7
    Sleep(1);
8
    *text++;
9
  }
10
  fflush(stdout);
11
}
#2665817
Lesenswert?

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.
Gast #2665869
Lesenswert?

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:
1
void Display(char text []){
2

3
  int max= sizeof(text);
4

5
...
6

7
// und
8

9

10
void Display(char text [128]){
11

12
  int max= sizeof(text);
13

14
...
#2665974
Lesenswert?

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:
1
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren