Hallo, ich habe folgenden Effekt, hervorgerufen durch folgende Zeilen: lcd_clear(); dtostrf(messung,4,0,txt); lcd_txt = "ADC:"; strcat(lcd_txt, txt); lcd_write_s(lcd_txt); lcd_txt = ""; (Der Rest des codes im Anhang) Im LCD Display erscheint beim ertsen Durchlauf "ADC: 260", wobei 260 der Wert aus adc-messung ist. Beim zweiten Durchlauf steht "ADC: 260 260" im Display. Beim dritten Durchlauf dann "ADC: 260 260 260" Das geht dann munter so weiter mit Stacküberlauf und fiesen Dingen. Ich weiss nicht woran es liegt. Ich habe schon einiges umgestellt und probiert. Würde mich über Hilfe sehr freuen. gruss christoph
versuch's mal so
1 | lcd_txt[0] = 0; |
2 | strcat(lcd_txt,"ADC:"); |
3 | strcat(lcd_txt, txt); |
4 | lcd_write_s(lcd_txt); |
Super klasse funktioniert! Wäre auch schön wenn ich jetzt auch noch verstehen würde, was da genau passiert. Aber erstmal recht herzlichen Dank. gruss Christoph
Hm, wieviel Speicher wird denn allokiert für ein char* ... erstmal nur soviel wie der Pointer selbst braucht. Und wenn man diesem Pointer fröhlich Strings "zuweist", wie schaut's dann mit dem Speicher aus?
Christoph Roters schrieb: > Wäre auch schön wenn ich jetzt auch noch verstehen würde, was da genau > passiert. Du schreibst jetzt 100 mal: Ein konstanter String, ein sog. String Literal, kann nicht verändert werden. Niemals! Und dann schreibst du noch 100 mal: Wenn ich einen String verändern möchte, zb indem ich ihn verlängere, dann brauche ich daher ein char-Array, in welchem der String abgelegt werden kann. Und dann denkst du mal darüber nach, was das alles mit dem hier > lcd_txt = "ADC:"; > > strcat(lcd_txt, txt); zu tun hat.
Ich habe das jetzt besser verstanden. Eher durch diesen Link http://de.wikibooks.org/wiki/C-Programmierung:_Arrays_und_Strings als durch die beiden letzten Beiträge. Habe es 100 mal hingeschrieben , hat aber irgendwie keinen Erkenntnissgewinn gebracht. ;-) Trotzdem Danke für die nette Hilfe hier im Forum Aber ich weiss jetzt, dass ein char immer ein Array ist und ich nicht so einfach Zuweisungen machen darf. Und das ich die Arrays am besten über Funktionen oder Pointer anspreche bzw. verwalte. Ich hoofe ich habe das einigermaßen richtig formuliert. Noch 2 Fragen: 1) Was genau bedeutet char * 2) Wen ich z.b. LCD_TXT[0] = 0; schreibe und vorher stand etwas in LCD_txt. Bleben das Reste von LCD_TXT im Speicher? Trotzdem Danke für die nette Hilfe hier im Forum Gruss Christoph
Christoph Roters schrieb: > http://de.wikibooks.org/wiki/C-Programmierung:_Arrays_und_Strings > als durch die beiden letzten Beiträge. Habe es 100 mal hingeschrieben , > hat aber irgendwie keinen Erkenntnissgewinn gebracht. ;-) > Trotzdem Danke für die nette Hilfe hier im Forum Jetzt fehlt nur noch die Einsicht, dass Online Tutorials einem vernünftigen Buch (zb. dem Klassiker "Kernighan & Ritchi") nicht das Wasser reichen können. Und ohne Literatur wirst du immer in der Situation sein, dass du über Halbwissen verfügst, das hinten und vorne nicht zusammenpasst. > Aber ich weiss jetzt, dass ein char immer ein Array ist und ich nicht so > einfach Zuweisungen machen darf. Siehst du: Genau das meine ich. Ein char ist kein Array. Ein char ist ein char. Strings werden immer als Abfolge von chars im Speicher abgelegt. Das kann sein ein char-Array, das kann aber auch ein String-Literal sein, von dem man einen Pointer auf den Anfang des Literals hat. > Und das ich die Arrays am besten über Funktionen oder Pointer anspreche > bzw. verwalte. Nicht notwendigerweise. Aber wenn du von Strings sprichst, kannman das so formulieren. Für Strings gibt es vorgefertigte Funktionen, die damit umgehen können. > 1) Was genau bedeutet char * char * a; a ist ein Pointer auf einen char. Ob sich an dieser Stelle im Speicher ein einzelner char befindet, oder ob dort der Start einer Sequenz von char ist, lässt sich am Pointer nicht ablesen. Das muss der Programmierer wissen. > 2) Wen ich z.b. LCD_TXT[0] = 0; schreibe und vorher stand etwas in > LCD_txt. > Bleben das Reste von LCD_TXT im Speicher? Ja, klar. Die Zuweisung verändert ja nur LCD_TEXT[0]. Alle anderen Elemente des Arrays bleiben unangetastet. Die Operation macht genau das, was da steht. Und nur das! Noch ein anderer Link http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F Aber: Das alles ist kein Ersatz für Literatur! Die paar Euros, die dir ein K&R kosten, sind gut investiertes Geld. Dafür bekommst du einen vernünftigen, umfangreichen und vor allem systematisch aufgebauten Kurs in alle Bereiche von C. Eine Programmiersprache wie C, mit all ihren Facetten, kann man nicht durch "Versuch und Irrtum" lernen und dadurch, dass man immer nur ein bischen Halbwissen ansammelt. Alles ist mit allem irgendwie verknüpft und hängt zusammen. Mit Halbwissen wirst du einen Teilbereich einer Sprache (zb Stringverarbeitung) niemals richtig verstehen, wenn du über andere wichtige Bereiche (Arrays, Pointer und die Zusammenhänge von Arrays und Pointer) überhaupt nichts weißt.
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.