Maximale Stringlänge in C

Gast #3617229
Lesenswert?

David G. schrieb:
> die maximale Stringlänge z.B für eine Serielle Übertragung?

Die serielle Übertragung ist nicht an irgendwelche Stringlängen 
gebunden. Jedes Zeichen wird einzeln über die Schnittstelle übertragen 
und löst bei Bedarf z.B. einen Interrupt aus. Wie das Programm mit dem 
Zeichen umgeht, ist einzig und alleine seine Sache. Es kann die Zeichen 
einfach einzeln im WOM ablegen und braucht dann überhaupt keine Strings.

Und in den WOM paßt mehr rein, als man so einem kleinen µC zutraut ;-)
Gast #3617235
Lesenswert?

ah, ok, sowas hatte ich jetzt schon gelesen.
In Pascal wird einem das vom Compiler abgenommen, und ers tneuere 
Versionen können bis 2Gb, bei den alten ist bei 255 zeichen Schluß weil 
ShortString..
Also müßte ich es genauso umständlich wie in C machen, wenn es mehr 
werden sollen :-(
Gast #3617240
Lesenswert?

David G. schrieb:
> In Pascal wird einem das vom Compiler abgenommen, und ers tneuere
> Versionen können bis 2Gb, bei den alten ist bei 255 zeichen Schluß weil
> ShortString..
> Also müßte ich es genauso umständlich wie in C machen, wenn es mehr
> werden sollen :-(

dafür kann Pascal auch eine \0 im String speichern.
#3617287
Lesenswert?

definiere 'umständlich'.

Die Kunst besteht ja nicht darin einen String der Länge x zu übertragen. 
Das kann man jedem Affen beibringen (keine Beleidigung beabsichtigt).
Die Kunst besteht darin, dass auch dann noch alles korrekt und 
fehlerfrei läuft, wenn die Putzfrau das Kabel der seriellen 
Schnittstelle abzieht und im laufenden Betrieb wieder ansteckt. Da 
trennt sich dann die Spreu vom Weizen. Und das kann auch dein Pascal 
nicht alleine handhaben.
Gast #3617376
Lesenswert?

Wie geht man da am bestne vor?
Ich habe jetzt nen Testarray aus 13 Chars.
Ich habe hier Testwerte von 1.23;4.56endx

Ich will nun als einzele Strings
1.23
4.56 haben.
end ist das ende..x eine unwichtiges Zeicehn oder ein Fehler etc pp

Einfach abzählen, ginge, sorgt aber sicher für Fehelrquellen?
Z.B. bei Temperaturen könnte es ja 1.50 oder aber auch 23.0 sein
Da würde es ja zum Fehler kommen
#3617389
Lesenswert?

David G. schrieb:
> Wie geht man da am bestne vor?

indem man erst mal ein vernünftiges Protokoll definiert, so dass man 
anhand des nächsten erhaltenen Zeichens (ja, Zeichnes) entscheiden kann, 
wie es im Empfang weiter geht.

> Ich habe jetzt nen Testarray aus 13 Chars.

Und dann definiert man die Dinge nicht 'auf Knirsch', so dass man nur 
mit Gewalt und viel Glück einem String-Überlauf gerade noch so entkommt.

> Ich habe hier Testwerte von 1.23;4.56endx

Also Zahlen.
Wenn möglich speichert man die überhaupt nicht als String, sondern 
wandelt die während des Einzelzeichen-Empfangs sofort in die Zahl um 
bzw. 'erweitert' eine Zahl um die Ziffer im nächsten erhaltenen Zeichen.

Einzige Ausnahme: wenn am anderen Ende schon auch mal ein Mensch sitzt, 
der gerne auch mal mit Backspace bereits übertragene Zeichen 
zurücknimmt. Aber dann wird das mit einem 13-er char Array sowieso 
nichts vernünftiges werden.
Moderator (Firma: Titel) Persönliche Seite #3617605
Lesenswert?

David G. schrieb:
> Bei dem 13 Char handelt es sich um einen festen wert, da ist nicht auf
> Knirsch,d aich es testweise ohne Seriele übetragung gerade nachbaue...
Blöderweise ist die REalität aber so, dass wegen Störungen oder 
sonstwas auf einemal mehr oder weniger als die 13 Zeichen kommen. Oder 
andere Zeichen als die erwarteten. Und dann muss dein Parser (das wäre 
jetzt so ein Stichwort für die weitere Recherche) damit zurechtkommen 
und sich wieder aufsynchronisieren können.

David G. schrieb:
> Ein starchar könnt ich noch einfüge. Also z.B. S
Wenn du "noch was einfügen" kannst, dann hast du offenbar das Protokoll 
in der Hand. Und dann mach einfach etwas, was man z.B. auch am Terminal 
sinnvoll lesen kann.
Statt das, was David G. schrieb:
> 1.23;4.56endx
also eher sowas:
00123;00456(CR)(LF)
Auch das sind 13 Zeichen, aber jetzt hat jede Stelle immmer die selbe 
Bedeutung. Und wenn das CRLF empfangen wurde, musst du nur noch 
kontrollieren, wieviele Zeichen davor empfangen wurden und kannst sagen: 
wenn es nicht genau 12 waren, dann war da ein Fehler. Fertig.
Wenn kein Fehler war, dann ist das erste Zeichen eine Hunderterstelle, 
das zweite die Zehnerstelle, das dritte eine Einerstelle, dann kommen 
Nachkommastellen. Dann muss ein ';' kommen, sonst: Fehler! Und so 
weiter...
Gast #3617655
Lesenswert?

das lässt sich aber vermutlich nicht, oder nur sehr viel Aufwand in der 
PC Software umsetzen, da ich hier mit Profilab arbeite und wahlweise der 
Empfänger ein µc oder eben der PC ist.
Controllerseitig hätte ich es sonst natürlich so oder so ähnlich gemacht

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