ich versuche zurzeit ein LCD zu programmieren.
Mein Problem ist nur, dass ich eine char-array ausgeben will und dafür
die Anzahl der Elemente benötige, die ich in dem Array gespeichert habe.
Ich hab mich im Internet informiert und das genau wie im Internet
beschreiben gemacht nur irgendwie kommt immer nur der Wert 2 dabei raus,
obwohl ich ein char-Array mit 9 Zeichen habe.
1
//Deklaration
2
unsignedshorttest_array=0;
3
4
5
//Aufruf
6
LCD_OutString("123456789");
7
8
//Funktion
9
voidLCD_OutString(chardata_string[])// gibt einen String aus
Peter Schwaab schrieb:> ich versuche zurzeit ein LCD zu programmieren.> Mein Problem ist nur, dass ich eine char-array ausgeben will und dafür> die Anzahl der Elemente benötige, die ich in dem Array gespeichert habe.
Nö. Brauchst du nicht.
In C gilt ja die Konvention: Ein String ist dort zu Ende, wo das \0
Zeichen steht.
D.h. du musst nur solange ausgeben, bis du auf ein \0 stösst. Dort ist
dann der String komplett ausgegeben
1
voidLCD_OutString(constchar*c)
2
{
3
while(*c!='\0')
4
LCD_OutChar(*c++);
5
}
Fertig.
Informier dich über Stringverarbeitung in C. Das ist täglich Brot und
sind Grundlagen.
Wenn du erstmal C könntest, wäre es schon klar...
Ein Feld wird in C nie als Feld übergeben, sondern immer nur als Zeiger
auf das unterste Element.
Dementsprechend liefert dir sizeof(data_string) nicht die Feldlänge in
Byte, sondern die Größe eines Zeigers in Byte.
Die Länge des Strings musst du immer entweder getrennt an eine Funktion
übergeben, oder es wird im Feld ein Element eingefügt mit einem
besonderen Wert als Marker für das Ende - bei C-Strings ist das
üblicherweise ein Nullbyte (also mit dem Wert 0, nicht '0').
Peter Schwaab schrieb:> Ich hab mich im Internet informiert und das genau wie im Internet> beschreiben gemacht
Wo hat man dir da so gezeigt?
Klaus Wachtler schrieb:> Wenn du erstmal C könntest, wäre es schon klar...
Damit meinte ich jetzt nicht KHB. Es sei denn natürlich, er fühlt sich
explizit angesprochen :-)
Kan asta schrieb:> Mhh, ist das jetzt nicht C++ ?
Doch, ist es natürlich auch. Nette Idee...
> Ich hab mich im Internet informiert
Du sollst dich nicht im Internet informieren, sondern ein C-Buch lesen
und durcharbeiten!
Kernighan&Ritchie
Programmieren in C
Persönlich bevorzuge ich Bücher aus Papier (weil man da am Rand mit
Bleistift Anmerkungen machen kann, oder Post-Its auf der Seite verteilen
kann oder überhaupt ganze Blätter mit eigenen Notizen an bestimmten
Stellen einlegen kann), aber es gibt natürlich auch Online-Bücher
http://openbook.galileocomputing.de/c_von_a_bis_z/
>Nö. Brauchst du nicht. In C gilt ja die Konvention: Ein String ist dort zu Ende,
wo das \0 Zeichen steht.
In diesenm Fall leider nicht brauchbar. Mach das Feld mit einer festen
Groesse, und das wird komplett gefuellt. Denn sonst bleiben dir alte
Zeichen rumstehen. Bei einem LCD sollte man immer den gesammten Inhalt
schreiben.
Zac Hobson schrieb:> In diesenm Fall leider nicht brauchbar. Mach das Feld mit einer festen> Groesse, und das wird komplett gefuellt.
dann sollte er für die größe einfach ein define anlegen, anders geht es
nicht.
Zac Hobson schrieb:> In diesenm Fall leider nicht brauchbar. Mach das Feld mit einer festen> Groesse, und das wird komplett gefuellt. Denn sonst bleiben dir alte> Zeichen rumstehen. Bei einem LCD sollte man immer den gesammten Inhalt> schreiben.
Meines Erachtens Speicherverschwendung. Dann ändere ich besser KHBs
Funktion einfach ab, um den Rest der Zeile mit Blanks zu beschreiben:
Zac Hobson schrieb:>>Nö. Brauchst du nicht. In C gilt ja die Konvention: Ein String ist dort zu Ende,> wo das \0 Zeichen steht.>> In diesenm Fall leider nicht brauchbar.
Komisch.
Für mindestens 8 Millionen Programmierer ist das brauchbar.
> Mach das Feld mit einer festen> Groesse,
Was hat das mit der generellen String Ausgabefunktion zu tun?
Das es Spezialfälle gibt, in denen zusätzlicher Aufwand nötig ist,
bestreitet keiner. Aber wenn, dann mach es auch richtig. Dann muss die
Funktion dann nämlich auch damit klarkommen, dass du einen String der
Länge 25 in einem Feld der Größe 10 ausgeben willst. D.h. du gibst nicht
die Stringlänge mit, sondern die Feldgröße, in die der String eingepasst
werden muss. Und das ist dann ein ganz anderes Thema.
Eine eigene Frage?
Dieser Thread ist über 14 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.