Zeichenkette

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren