Sonderzeichen in konstanten String

OP #443503
Hallo,

ich würde gerne einen konstanten String an eine Funktion übergeben.

funktion("Das ist der Text mit Sonderzeichen : x");

Wobei x ein Sonderzeichen ist (es steht nicht immer am Ende des Textes). 
Am schönsten wäre es, wenn man einige Zeichen wie \n oder so noch 
definieren könnte. Oder gibt es eine Möglichkeit Sonderzeichen direkt in 
den String zu schreiben? So ala "Texte mit \0x3f Sonderzeichen" ?

sprintf usw würde ich gerne vermeiden. Es sollte möglichst klein sein 
(vom Flash) und es würde mich auch ein wenig stören, wenn der Controller 
einen Text zusammenbauen muss, den eigentlich der Compiler schon hätte 
zusammenbauen können.

Ich hoffe ich konnte einigermassen ausdrücken was ich gerne möchte.

Vielen Dank schonmal
Gruß Philipp
Gast
Habs auch vorhin gemerkt :)

\41 ergab ! und nicht A

Woran wird eigentlich unterschieden ob ich \0 und danach ne Zahl in ein 
char* schreiben möchte oder ob es zB \03 sein soll?

Gruß Philipp
Am Leerzeichen das dazwischen steht.

Es gibt aber noch einen Trick.
Der Compiler muss mehrere String-Literale die hintereinander
aufgeführt werden zu einem einzigen zusammenfassen.

D.h. ob du

   "Hallo " "Welt"

oder

  "Hallo Welt"

oder

  "Ha" "ll" "o W" "el" "t"

schreibst ist völlig Wurscht. Ist immer dasselbe: Ein
einziger String mit dem Inhalt "Hallo Welt"

Damit kannst du schreiben

   "Texte mit " "\0x41" "5 Sonderzeichen"

Du kannst natürlich dann auch mit Makros arbeiten

// Wenn du zb. in einem LCD die Sonderzeichen 0x01 und
// 0x02 mit Dreieck nach links bzw. Dreieck nach rechts
// belegt hast
#define LEFT "\0x01"
#define RIGHT "\0x02"

....

  lcd_puts( LEFT " Ueberschrift " RIGHT );

Nach der Makro Expansion steht da:

  lcd_puts( "0x01" " Ueberschrift " "0x02" );

Und der Compiler zieht die einzelnen STrings zu einem
zusammen:

  lcd_puts( "0x01 Ueberschrift 0x02" );
Gast
@Karl heinz Buchegger

>   "Texte mit " "\0x41" "5 Sonderzeichen"

Korrektur!

Es muss heissen

   "Texte mit " "\x41" "5 Sonderzeichen"

OHNE 0! Sonst meckert der Compiler, weil er \0 als NULL einfügt und den 
Rest als normale Buchstaben. Und es gibt noch eine weitere Stolperfalle.
Man kann diese Sonderzeichen problemlos direkt in einen String schreiben 
ala

"Das ist schön!" für ein Standard-LCD-> "Das ist sch\xEFn!"

Doch hier lauert McMurphy. In einem String wie "Ich bin am Drücker" 
würde man intuitiv als "Ich bin am Dr\xF5cker" schreiben. Allerdings 
interpretiert der Parser nicht F5 als Char, sondern F5C, weil ja der 
nächste Buchstabe ein C ist. Da das nicht mehr in 8 Bit passt gibts ne 
Warnung und es kommt auch Müll raus. Also immer schreiben
"Ich bin am Dr" "\xF5" "cker"

MfG
Falk

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 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.