Hallo, ich habe vor die lcd-lib, die man hier im wiki finden kann um einer Laufschriftfunktion zu erweitern. Der Funtkionsaufruf soll irgendwie mit z.B. lcd_runningtext("Anzuzeigender Text","Welche Zeile","Wie viel Zeichen pro Zeile") stattfinden. Gut, nun müsste ich den Text ja als String übergeben. Den String initialisieren kann ich ja z.B. mit unsigned char text[50] machen. Nun kommen aber erste Fragen auf: 1. Wie kann ich zählen, wieviel Zeichen der übergebene String hat (Gibts da Funktionen wie strlen, oder muss ich irgendeinen Zähler einbauen, der z.B. bei jedem Schleifendurchlauf schaut, ob noch ein Zeichen kommt, und dann immer mitzählt?) 2. Jetzt nicht unbedingt zu dem Programm, aber wie kann ich einem String einfach ein Wort zuweisen? Wenn ich z.B. text='hallo'; schreibe, dann lässt mir mein C-Compiler (WinAVR Plugin in AVR Studio) das nicht durchgehen. 3.Brauch ich noch irgendwelchen libs, wenn ich mit Strings arbeite? 4.Gibt es dazu irgendwelche guten Tutorials, in denen ich das alles nachlesen kann? Im wiki hab ich jetzt explizit zu Strings nichts gefunden. 5.Gar nicht zu Strings: Wie kann ich der Funkton set_cursor("Spalte","Zeile") eine Variable übergeben? Also z.B. .... int i; i=5; set_cursor(0,"Wie hier nun das i?"); .... So, das waren jetzt eigentlich alle, vielleicht fallen mir später ja noch irgendwelche Fragen ein. Ach ja, die Laufschrift soll bei z.B. einem 8 Zeichen-Display (ist mir zwar nicht bekannt, dass es so was gibt, ist aber nicht so viel Tipparbeit hier fürs Bsp.) so sein: (text[1],text[2],text[3],...usw. stellen jeweils ein Zeichen des Strings dar, der der Funktion übergeben wurde) text[1],text[2],text[3],text[4],text[5],text[6],text[7],text[8] text[2],text[3],text[4],text[5],text[6],text[7],text[8],text[ ] text[3],text[4],text[5],text[6],text[7],text[8],text[ ],text[1] text[4],text[5],text[6],text[7],text[8],text[ ],text[1],text[2] u s w ... Vielen Dank schon einmal im voraus. Gruß, Steffen
Steffen O. wrote: > Gut, nun müsste ich den Text ja als String übergeben. Den String > initialisieren kann ich ja z.B. mit unsigned char text[50] machen. Damit initialisierst Du gar nichts. Du deklarierst damit lediglich ein Array mit unsigned char-Werten. Und für Textzeichen (ASCII) ist unsigned char keine geschickte Wahl. Generell werden Textzeichen in C standardmäßig als char verwurstet. Auch Bibliotheksfunktionen, die mit Zeichenketten arbeiten, erwarten char und nicht unsigned char. Gibt sonst zumindest ne Warnung vom Compiler. > Nun kommen aber erste Fragen auf: > 1. Wie kann ich zählen, wieviel Zeichen der übergebene String hat (Gibts > da Funktionen wie strlen, Gibt es. > oder muss ich irgendeinen Zähler einbauen, der > z.B. bei jedem Schleifendurchlauf schaut, ob noch ein Zeichen kommt, und > dann immer mitzählt?) ASCII-Zeichenketten sind in C automatisch nullterminiert, d.h. wenn man eine Zeichenkette korrekt angibt (mit doppelten Anführungszeichen), dann wird automatisch am Ende noch eine 0 ('\0') eingebaut, weshalb eine Zeichenkette in C immer ein Zeichen mehr belegt als angegeben. > 2. Jetzt nicht unbedingt zu dem Programm, aber wie kann ich einem String > einfach ein Wort zuweisen? Wenn ich z.B. text='hallo'; schreibe, dann > lässt mir mein C-Compiler (WinAVR Plugin in AVR Studio) das nicht > durchgehen. Damit hat der Compiler auch völlig recht! In einzelne Hochkommata wird ein einzelnes Zeichen eingeschlossen (also z.B. 'a' oder 'X'). Eine Zeichenkette wird in doppelte Anführungszeichen (also "String") eingeschlossen. Außerdem gibt es in C keinen Datentyp string. Ein String (eine Zeichenkette) ist immer ein Array von char. Und ein Array kann man nicht als Ganzes zuweisen. Man kann nur bei der Initialisierung eines Arrays eine Zeichenkette als Initialisierungswert angeben. Also z.B.
1 | char string[] = "Das ist ein String"; |
> 3.Brauch ich noch irgendwelchen libs, wenn ich mit Strings arbeite? Sinnvoll ist zumindest, die Funktionen aus der string.h zu nutzen... > 4.Gibt es dazu irgendwelche guten Tutorials, in denen ich das alles > nachlesen kann? Im wiki hab ich jetzt explizit zu Strings nichts > gefunden. Das meiste, was offensichtlich unklar ist, steht in jedem guten C-Buch (z.B. K&R). Und ohne ein gutes Buch für die Basics wird es schwer...
Hallo, Vielen Dank schonmal für deine schnelle und ausführliche Antwort!!!! Johannes M. wrote: > Steffen O. wrote: >> Gut, nun müsste ich den Text ja als String übergeben. Den String >> initialisieren kann ich ja z.B. mit unsigned char text[50] machen. > Damit initialisierst Du gar nichts. Du deklarierst damit lediglich ein > Array mit unsigned char-Werten. Und für Textzeichen (ASCII) ist > unsigned char keine geschickte Wahl. Generell werden Textzeichen in C > standardmäßig als char verwurstet. Auch Bibliotheksfunktionen, die mit > Zeichenketten arbeiten, erwarten char und nicht unsigned char. Gibt > sonst zumindest ne Warnung vom Compiler. Ok, danke für den Tip!!! >> Nun kommen aber erste Fragen auf: >> 1. Wie kann ich zählen, wieviel Zeichen der übergebene String hat (Gibts >> da Funktionen wie strlen, > Gibt es. Und wie heißen die z.B.? >> oder muss ich irgendeinen Zähler einbauen, der >> z.B. bei jedem Schleifendurchlauf schaut, ob noch ein Zeichen kommt, und >> dann immer mitzählt?) > ASCII-Zeichenketten sind in C automatisch nullterminiert, d.h. wenn man > eine Zeichenkette korrekt angibt (mit doppelten Anführungszeichen), > dann wird automatisch am Ende noch eine 0 ('\0') eingebaut, weshalb eine > Zeichenkette in C immer ein Zeichen mehr belegt als angegeben. Ok, das mit den Anführungszeichen wusste ich auch noch nicht! >> 2. Jetzt nicht unbedingt zu dem Programm, aber wie kann ich einem String >> einfach ein Wort zuweisen? Wenn ich z.B. text='hallo'; schreibe, dann >> lässt mir mein C-Compiler (WinAVR Plugin in AVR Studio) das nicht >> durchgehen. > Damit hat der Compiler auch völlig recht! In einzelne Hochkommata wird > ein einzelnes Zeichen eingeschlossen (also z.B. 'a' oder 'X'). Eine > Zeichenkette wird in doppelte Anführungszeichen (also "String") > eingeschlossen. Siehe oben. > Außerdem gibt es in C keinen Datentyp string. Ein String (eine > Zeichenkette) ist immer ein Array von char. Und ein Array kann man nicht > als Ganzes zuweisen. Man kann nur bei der Initialisierung eines Arrays > eine Zeichenkette als Initialisierungswert angeben. Also z.B. >
1 | > char string[] = "Das ist ein String"; |
2 | >
|
>> 3.Brauch ich noch irgendwelchen libs, wenn ich mit Strings arbeite? > Sinnvoll ist zumindest, die Funktionen aus der string.h zu nutzen... Ok, werd ich dann noch einfügen... >> 4.Gibt es dazu irgendwelche guten Tutorials, in denen ich das alles >> nachlesen kann? Im wiki hab ich jetzt explizit zu Strings nichts >> gefunden. > Das meiste, was offensichtlich unklar ist, steht in jedem guten C-Buch > (z.B. K&R). Und ohne ein gutes Buch für die Basics wird es schwer... Ja, ich habe bis jetzt nur ein günstiges Buch für den Einstieg, was wirklich nur die Grundthemen behandelt, und außerdem C-allgemein ist, sich also nicht mit GCC befasst. Gruß, Steffen
Steffen O. wrote: >>> da Funktionen wie strlen, >> Gibt es. > > Und wie heißen die z.B.? Hast Du doch selbst geschrieben! Und zur Bibliothek gibt es eine Dokumentation... > Ja, ich habe bis jetzt nur ein günstiges Buch für den Einstieg, was > wirklich nur die Grundthemen behandelt, und außerdem C-allgemein ist, > sich also nicht mit GCC befasst. Das ist allgemeines C! Der GCC ist ein ANSI-C-Compiler und hält sich dementsprechend auch an das, was in den allgemeinen Grundlagenbüchern steht. Es gibt nur einige µC-spezifische Erweiterungen. Die Funktionen aus der string.h gehören zum Funktionsumfang eines jeden ANSI-C-Compilers und sind dementsprechend auch im Standard sowie in Büchern, die sich auf den Standard beziehen (also z.B. K&R) dokumentiert. Klar, es gibt auch plattformspezifische Erweiterungen der Standard-Libs, aber der Grund-Funktionsumfang ist immer gegeben.
Johannes M. wrote: > Steffen O. wrote: >>>> da Funktionen wie strlen, >>> Gibt es. >> >> Und wie heißen die z.B.? > Hast Du doch selbst geschrieben! Und zur Bibliothek gibt es eine > Dokumentation... Die Dokumentation zu lib hab ich bis jetzt noch nicht gefunden. Ich dachte eben dass der Befehl zum Zähen irgendwie anders sein würde, aber strlen funktioniert mit string.h gut. >> Ja, ich habe bis jetzt nur ein günstiges Buch für den Einstieg, was >> wirklich nur die Grundthemen behandelt, und außerdem C-allgemein ist, >> sich also nicht mit GCC befasst. > Das ist allgemeines C! Der GCC ist ein ANSI-C-Compiler und hält sich > dementsprechend auch an das, was in den allgemeinen Grundlagenbüchern > steht. Es gibt nur einige µC-spezifische Erweiterungen. Die Funktionen > aus der string.h gehören zum Funktionsumfang eines jeden > ANSI-C-Compilers und sind dementsprechend auch im Standard sowie in > Büchern, die sich auf den Standard beziehen (also z.B. K&R) > dokumentiert. Klar, es gibt auch plattformspezifische Erweiterungen der > Standard-Libs, aber der Grund-Funktionsumfang ist immer gegeben. Ach so, auch dies war mir nicht so bewusst. Ich dachte bei GCC sind auch einige Befehle anders..... Also die Funktion ist jetzt fertig, aber sie funktioniert nicht richtig. Jetzt muss ich eben versuchen die noch irgendwie hinzubekommen...... Gruß, Steffen
> Die Dokumentation zu lib hab ich bis jetzt noch nicht gefunden.
Bei der Installation von WINAVR wird die Dokumentation automatisch mit
"installiert". Im Zweifelsfall "Start | Programme | WINAVRxxxxxxxx |
avr-libc-Dokumentation"...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.