Newbiefrage zu C-Typdeklarationen

Gast #179555
Lesenswert?

Ich beginne gerade erst, mich mit C auseinanderzusetzen und habe noch
einige Verständnisprobleme bei der Deklaration und Verwendung von
Strings.
Folgender Hintergrund:
Ich möchte einen String Zeichen für Zeichen in ein LCD-Display
schreiben.
Ich habe dafür auch schon Codeschnippsel entdeckt, die mehr oder minder
gut funktionieren - allerdings würde ich auch gern verstehen, was ich da
eigentlich tue.
Ich habe zum Einen eine Funktion zum Schreiben eines einzelnen Char´s -
hier ist die Arbeitsweise vollkommen klar.
Eine weitere Funktion soll einen String übergeben bekommen und diesen
Zeichen für Zeichen mittels der vorgenannten Funktion ausgeben.
Hier beginnen meine persönlichen Fragezeichen:
Wie deklariere ich den Typ "String" überhaupt?
Wie kann ich auf einzelne Zeichen des Strings (beliebig oder der Reihe
nach) zugreifen?

Ich würde mich sehr freuen, wenn mir einer von Euch dabei auf die
Sprünge helfen könnte....
Danke im Voraus
Volkhard
Gast #179556
Lesenswert?

Ein String ist in C ein Array von chars. Das Stringende wird i.d.R.
durch das Zeichen '\0' (null) gekennzeichnet.

Näheres dazu liest man am besten im Buch "Programmieren in C",
Kernighan & Ritchie, zweite Auflage, Hanser Verlag.
Gast #179557
Lesenswert?

In dem Zusammenhang solltest Du Dir auf jeden Fall auch Pointer(Zeiger)
ansehen.

hier mal eine Bsp zum Zeichweisen ausgeben eines "Strings" (real
natürlich ein array of char)


void send_string(char* string)
{
    while(*string)
    {
        lcd_data(*string++); //diese Funktion gibt ein Char aufs LCD
    }
}

Du übergiebst der Funktion einen Zeiger der auf das erste Element
Deines Array of Char zeigt.
In der while-Schleife wir zuerst immer überprüft ob das Ende(0x00) des
"Strings" erreicht ist.
Wenn nicht wir der Inhalt(mit dem *) der Speicherstelle auf die der
Zeiger string zeigt ausgegeben und anschließend der Zeiger auf das
nächste element des Arrays gesetzt(mit dem ++).

Wie gesagt Zeiger sind elementar für C und das solltest Du dir auf
jeden Fall mal ansehen.

Der Kernighan & Ritchie ist auf jeden Fall eine gute Anlaufstelle


Gruß Jochen
Gast #179559
Lesenswert?

So, hier bin ich nochmals.
Habe mir inzwischen den Kernighan/Ritchie zugelegt und auch das
angegebene Onlinebuch durchstöbert.
Etliches ist mir dabei klar(er) geworden.
Eine Frage habe ich dennoch:
Dass über ein vorangestelltes Sternchen eine Variable dereferenziert
wird und über diesen Pointer auf den Variableninhalt zugegriffen
werden, habe ich begriffen.
Ich bin aber auch schon auf die Notation
char*
ohne (!) Zwischenraum zwischen dem Typ "char" und dem Sternchen
gestoßen.
Diese Variante habe ich in keiner meiner Quellen erläutert bekommen.
Handelt es sich dabei schlichtweg um einen Tippfehler (die Variante
"char *" ist mir durchaus schon klar)?
Vielen Dank im Voraus für die Belehrung...
Gast #179561
Lesenswert?

wobei zweiter Notation besser ist denn:

char* a, b;
char *a, b

Beides macht a als Pointer auf char und b als char ist meiner Ansicht
nach aber bei der zweiten Variante besser zu erkennen.

Grüßle Jochen
Gast #179562
Lesenswert?

Tach! Ist Geschmackssache,

mir gefällt

char* a;

besser, weil ich hab die Variable a (letztes "Feld") die vom Typ
"pointer auf char" ist (erstes "Feld")...

Wenn man natürlich mehrere Variablen in einer Zeile definiert ist aber
Jochens Version besser, aus Gründen der Übersichtlichkeit würde ich
persönlich aber schreiben:

char a;
char b;
char* c;
char* d;

...der Geschmack rührt wohl von Pascal her, da hieße es
var
  a: ^byte;

Stefan

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