Sonderzeichen in konstanten String

OP #443503
Lesenswert?

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 #443706
Lesenswert?

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
#443722
Lesenswert?

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 #492089
Lesenswert?

@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

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