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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.