Hi leute hab nun schon sehr viel rumgeschaut aber irgendwie find ich keine passende Antwort bzw. Erklärung für mein Problem ich möchte einzelne Zeichen die gesendet werden in einen zu einem char zusammenfassen. Also einen String aufbauen. Und eben in die Variable immer wieder ein zeichen dazu schreiben. Anschließend möchte ich den String auf meinem LCD ausgeben lcd_string(.....); allerdings weiss ich nicht genau wie ich die Variablen richtig deklariere und beschreibe. Zum test hab ich es erstmal so probiert aber selbst dass scheitert schon char *Titel ="String"; lcd_string(*Titel); Fehler: warning: character constant too long for its type initialization makes pointer from integer without a cast wie müsste ich die Variable deklarieren und schreiben um die funktion vollständig zu erhalten. Und wie befülle ich eine char Variable nacheinander mit Zeichen? Gibt es auch die Möglichkeit abzufragen wieviel Zeichen in der Variable drin sind?
es gibt wie immer viele möglichkeiten am einfachsten ist es sich einen buffer anzulegen und eine zählvariable die merkt wieviel schon reingeschrieben wurden char buffer[32]; unsigned char idx = 0; buffer[idx++] = 'A'; buffer[idx++] = 'B'; ... wenn du buffer weiter an eine funktion geben willst, dann muss man auf alle fälle nachlesen und sich vergewissern wie diese funktion die daten erwartet. sie könnte nämlich im buffer alle zeichen nehmen, bis sie auf 0 stosst. nicht '0' sondern 0. diese terminiernde 0 muss du selbst als letzts hinschreiben buffer[idx] = 0; in anderen fällen erwartet die funktion explizit die anzahl der zeichen. hier ist der vorteil, dass man auch binäre 0 als daten übergeben kann. in manchen anwendungen macht es ja sinn, zb koordinaten oder ähnliches. morgengrüsse^^, daniel
In dem von dir kompilierten Programm steht höchstwahrscheinlich nicht
1 | char *Titel ="String"; |
sondern
1 | char *Titel ='String'; |
was zu der genannten Fehlermeldung führt. Beim Funktionsaufruf ist der * zuviel. Es führt dazu, dass das Zeichen, auf das Titel zeigt, nämlich das 'S' an lcd_string übergeben wird. lcd_string erwartet aber wahrscheinlich eine char-Zeiger, also muss es so heißen:
1 | lcd_string(Titel); |
Die obige Definition von Titel legt einen String ("String") an und eine Zeigervariable (Titel), die auf das erste Zeichen dieses Strings zeigt. Das ist zwar korrekt, i. Allg. kann man sich aber den Speicherplatz für den zusätzlichen Zeiger sparen, indem man Titel selbst ein Array sein lässt:
1 | char Titel[] ="String"; |
2 | |
3 | lcd_string(Titel); |
> ich möchte einzelne Zeichen die gesendet werden in einen zu einem char
zusammenfassen.
Das wird nicht gehen, es ist ein Widerspruch: Ein (1) CHAR ist ein
einzelnes Zeichen (Buchstabe, Zahl, Sonderzeichen, Steuerzeichen etc.
(es ist meistens 1 Byte groß, wenn es in ASCII, ISO-xxx, EBCDIC oder
ähnlich interpretiert werden soll)
Demzufolge wird es dir nicht gelingen, mehrere CHAR "zusammen zu fassen"
und in einer Variable vom Datentyp CHAR hinein zu quetschen.
Was allerdings geht, ist folgendes:
Du kannst ein Array einer bestimmten Größe definieren, und dort mehrere
CHAR "irgendwo" innerhalb des zur Verfügung stehenden Platzes ablegen.
Der Zugriff auf die Position wo du was ablegst mußt du selbst verwalten.
Er geschieht über "Zeiger auf den Anfang der Speicheradresse des Array"
Ohh wunderbar habs ez so gelöst
1 | char Titel[255]; |
2 | unsigned char idx = 0; |
3 | //Titel = 'S';
|
4 | //char *Interpret;
|
5 | |
6 | Titel[idx++] = 'A'; |
7 | Titel[idx++] = 'b'; |
8 | Titel[idx++] = 'e'; |
9 | Titel[idx++] = 'r'; |
10 | Titel[idx++] = 'r'; |
11 | |
12 | lcd_string(Titel); |
13 | lcd_data(idx+48); |
allerdings würde es mich interessieren warum ich für diese idx variable die ich ja hochzähle char nehme?
Und wie kann ich Titel komplett löschen? Klar idx auf 0 um wieder vorne anzufangen. Aber wenn nun vorher mehr zeichen drin waren als jetzt geschrieben werden?
Um den Quatsch hier mal zu beenden: char *Titel = "String"; lcd_string(Titel); wird funktionieren.
stimmt was zwei zeichen alles ausmachen können! trotzdem warum für die idx variable char nehmen?
Thomas Frosch wrote: > stimmt > > was zwei zeichen alles ausmachen können! > > trotzdem warum für die idx variable char nehmen? char Titel[255]; unsigned char idx = 0; deine Puffer kann 255 Zeichen entgegen nehmen! Hast du da so festgelegt: char Titel[255]; um nun auf jedes Zeichen zugreifen zu können brauchst du einen Index der von 0 bis 254 (maximal) laeuft... Char ist da ja bekanntermaßen ausreichend... (2^8)-1 = 255! (8 bit) Wie du den Puffer loescht solltest du selber wissen, oder? entweder: unsigned char i = 0;
1 | for (i=0; i<255; i+=1){ |
2 | Titel[i] = 0; |
3 | }
|
4 | |
5 | idx = 0; |
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.