Forum: Mikrocontroller und Digitale Elektronik strings kürzen


von Marco G. (grmg2010)


Lesenswert?

Moin,

welche c-Funktion eignet sich am Besten, wenn ich bei einem String, der 
von einem AVR empfangen wird, die ersten drei Zeichen entfernen möchte.

Des Weiteren möchte ich auch Sonderzeichen auf diesem Weg übertragen. 
Dies habe ich wie folgt übertragen "xyz\337" Eigentlich sollte ein 
°-Zeichen dabei herauskommen, macht es jedoch nicht.

Gruß

von DirkB (Gast)


Lesenswert?

Wenn du in ein anderes char-Array kopieren willst, kannst du bei Quelle 
3 dazu addieren.

Wenn es im selben Array sein sollte, dann memmove.
Selber schreiben ist aber auch nicht schwer.

Woher hast du den Code für das Grad-Zeichen?
Und wie steht der Text im Code? Ist das eion Stringliteral oder eine 
Nutzereingabe?

von Marco G. (grmg2010)


Lesenswert?

Ich übertrage per BT Verbindung einen String, der dann auf einen OLED 
ausgegeben werden soll. Daher kommt auch der Code für das Grad-Zeichen. 
Ich habe aber scheinbar das Problem, dass schon \ nicht als 
Sequenzbeginn interpretiert wird, sondern als Zeichen auf dem LCD 
übergeben wird.
Soll alsoe ein Stringliteral darstellen.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Marco G. schrieb:
> Ich habe aber scheinbar das Problem, dass schon \ nicht als
> Sequenzbeginn interpretiert wird,

Wenn das im String steht, steht das im String drin. Als "Sequenzbeginn 
interpretiert" wird es nur im C/C++-Sourcecode.

von DirkB (Gast)


Lesenswert?

Wenn im Quelltext ein Stringliteral steht, z.B. "xyz\337", dann macht 
der C-Compiler daraus einen String mit 4 Zeichen + den Null-Terminator.

Wenn du aber diese 7 Zeichen (3Buchstabe, 1 Sonderzeichen, 3 Ziffern) 
über eine Schnittstelle (BT, Tastatur, ..) empfängst, hast du 7 Zeichen.

von Rolf M. (rmagnus)


Lesenswert?

Marco G. schrieb:
> welche c-Funktion eignet sich am Besten, wenn ich bei einem String, der
> von einem AVR empfangen wird, die ersten drei Zeichen entfernen möchte.

Das einfachste und speichersparendste ist:
1
char* ergebnis = quelle + 3;
Das entfernt zwar nicht die drei ersten Zeichen, aber überspringt sie 
beim lesen.

von Marco G. (grmg2010)


Lesenswert?

DirkB schrieb:
> Wenn im Quelltext ein Stringliteral steht, z.B. "xyz\337", dann macht
> der C-Compiler daraus einen String mit 4 Zeichen + den Null-Terminator.
>
> Wenn du aber diese 7 Zeichen (3Buchstabe, 1 Sonderzeichen, 3 Ziffern)
> über eine Schnittstelle (BT, Tastatur, ..) empfängst, hast du 7 Zeichen.

Ok, das ist soweit klar. Kann ich an beliebiger Stelle des Strings einen 
weiteren String einfügen? Es würde ja gehen, wenn ich mein Zeichen im 
Quellcode ablege und dann nur noch an eine bestimmte Stelle hinzufüge.

: Bearbeitet durch User
von DirkB (Gast)


Lesenswert?

Marco G. schrieb:
> Kann ich an beliebiger Stelle des Strings einen
> weiteren String einfügen?

Ja das geht.
Eine fertige Funktion (aus der Standard-Library) gibt es dafür nicht.
Es ist aber nicht schwierig.

Ein einzelnes Zeichen kannst du ganz leicht ersetzen.

(Wenn es ein Array ist. Bei einem Stringliteral geht es nicht, da es 
meist in geschützem Speicherbereich liegt)


Marco G. schrieb:
> Ok, das ist soweit klar.

Wirklich? Deine weiteren Fragen lassen mich daran zweifeln.

Du musst dafür Arrays und Strings in C begriffen haben.
Aber dann würdest du diese Fragen nicht stellen.

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
Noch kein Account? Hier anmelden.