www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeichenkette


Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Wie erkenne ich in C das Ende einer Zeichenkette die über die UART 
eingelesen wurde?Mit der 0 komme ich nicht ganz klar.
so ungefähr sieht das ganze aus:

char a;
char i;
char string[20]; --->wie geht das wenn ich nicht weiß wie lang der 
String wird?

i=0;
do
 {
 a=getchar();
 string[i]=a;
 i++;
 }
while(a!=0); --->die 0 soll das ende der Zeichenkette sein

puts(string); --->den eingelesenen string ausgeben (als test)

Vielen Dank im voraus
Gruß Helge

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat denn keiner ne Idee? Ich stecke da irgendwie total fest!!!

Autor: ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
falls du die zeichen über ein terminal mit der hand
eintippst, ist das letzte zeichen ein:

'\r' = Wagenruecklauf = "ENTER" = 0x0D

darauf müßtest du warten, aber nicht in den string
schreiben, sondern 0x00 für die endekennung.

ralf

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lese den String über die serielle Schnittstelle ein.Ist ne 
Rückmeldung vom Handy. Ich schicke zB. at+cmgr=1 raus (funktioniert 
auch)und bekomme als Antwort ne SMS zurück.Da müßte doch zum Schluß 
automatisch ne \0 mit im String sein.Aber das funktioniert irgendwie 
nicht.
Gruß Helge

Autor: Sascha Weitkunat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie währe es wenn du dann auch mal auf '\0' prüfst anstatt auf den wert 
0? a ist in deinem konstrukt übrigens überflüssig.

Autor: ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
auszug von:
http://www.joern.de/handypc/handypc.htm


at+cmgr=1<CR>                       PC-->Handy: SMS Nr.1 lesen, <13>
+CMGR: "REC UNREAD","+491755759702",,"02/03/08,07:26:57+04"<CR>
                                    Handy-->PC: ungelesene 
SMS,Nr.,,Datum,Uhrzeit, <13>
Hallo, das ist ein Test<CR>         Handy-->PC: Text, <13>
<CR>                                Handy-->PC: <13>
OK<CR>                              Handy-->PC: OK<13>


also bringt <CR> das ganze in form.
gilt natürlich nur für den textmode.

ralf

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Tips.
Ich glaube es lag an meiner 0. Das mit dem '\0' hab ich nicht ganz 
begriffen.
Der Link ist auch recht interessant. Ich benutze den PDU-Mode.Das mit 
<CR> funktioniert ja alles recht gut.
Bloß mit der '\0' :-((((( ojee
Gruß Helge

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

dein Handy schickt einfach kein '\0' (Das ab ANSI C99 übrigens identisch 
ist mit 0) sondern nur einen formatierten Text der irgendwie mit <CR> 
formatiert ist. Das mußt du halt auswerten. Oder du wartest eine 
bestimmte Zeit bis keine Zeichen mehr ankommen und zerpflückst das Ganze 
dann hinterher.

Matthias

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Handy wird kein '\0' schicken,das denke ich auch.Ich dachte es wird 
beim abspeichern in den String automatisch hinten dran gehängt wenn kein 
zeichen mehr empfangen wird.Ich werde wahrscheinlich die schleife 20mal 
durchlaufen lassen.Dann müßte ich ja 20 zeichen in meinem String 
wiederfinden.

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also irgendwie stelle ich mich zu blöd an!
Auf die '\0' warten bringt nichts weil das Handy keine sendet.
Jetzt wollte ich einfach mal 10 Zeichen einlesen. Wenn das Handy aber 
nur 8 Zeichen sendet hängt die ganze Sache bei getchar() fest.
Gibts ne möglichkeit wenn kein Zeichen mehr anliegt das es dann 
irgendwie weiter geht? Hab schon mit if und else rum experimentiert aber 
alles ohne Erfolg.
Wenn ich nur 5 Zeichen einlese und das Handy zB. 8 Zeichen sendet ist 
alles iO..
Gruß Helge

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich würde das per INT machen. Der serielle INT schreibt alles was er 
empfängt in einen Ringpuffer. In der Hauptschleife wertest du dann einen 
Zähler aus den die INT Routine setzt um festzustellen ob und wieviele 
Zeichen empfangen wurden. Dann kannst du den Inhalt des Ringpuffer 
auswerten.

Matthias

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wär noch ne möglichkeit.Hab zwar noch nicht mit dem UART INT 
gearbeitet aber ich werde mich da mal hinterklemmen.
Danke für den Tip
Gruß Helge

Autor: ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
irgendwie komme ich hier nicht mit.
wenn du mit einem handy kommunizieren willst, mußt du dich
an den standard halten.
warum willt du 10, 8 oder 5 zeichen einfach so einlesen?
im pdu- und im textmode wird immer die längenangabe mit-
gesendet. werte das mal aus, dann klappts auch.

ralf

Autor: Helge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Ralf
Das mit den 8 Zeichen war ja auch nur zum probieren.Hab die Sache jetzt 
mit dem INT gelöst.Geht super.Ich dachte die Sache mit dem INT ist 
komplizierter.
Gruß Helge

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.