Zeichenkette

Gast #24223
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
Gast #24225
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
Gast #24226
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
Gast #24228
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
Gast #24229
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
Gast #24230
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
Gast #24231
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.
Gast #24232
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
Gast #24233
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
Gast #24234
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
Gast #24235
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
Gast #24236
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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.