Forum: Compiler & IDEs Sonderzeichen in Zeichenketten einfügen


von Thomas H. (Gast)


Lesenswert?

Hallo,

ich definiere folgenden Zeiger fuer die LCD-Ausgabe:

const char *text="ABCDEFG"

Mit printf(text) erhalte ich die Zeichenkette zurueck. Wie mache ich
es, wenn ich in die Zeichenkette ein Sonderzeichen einfuegen moechte,
z. B dass die Ausgabe heisst "Winkel in ° ist:".

In Assembler wuerde es ja mit:

"Winkel in ", 0xHexcode, " ist:"

gehen. In GCC nimmt er das so nicht an. Wie kann ich es dort machen?

Danke,

Thomas H.

: Gesperrt durch User
von Peter D. (peda)


Lesenswert?

Das geht mit dem "/", leider haben die C-Erfinder aber Oktalzahlen
genommen, also "/001" bis "/377" sind möglich.

"ein sonderzeichen/002und noch eins/376 usw."


Peter

von Matthias (Gast)


Lesenswert?

Hi

aber mit \ und nicht mit /

Matthias

von Christian Schifferle (Gast)


Lesenswert?

Geht selbstverständlich auch mit Hexzahlen, einfach ein x vor die
zweistellige Hexzahl setzen:

const char *text = "Winkel is \xB0 Grad";

Gruss
Christian

von Jörg Wunsch (Gast)


Lesenswert?

...und falls die Abgrenzung damit nicht eindeutig sein sollte,
erinnert man sich daran, daß C89's Ausweg daraus das Zusammenhängen
nebeineinanderstehender Strings zu einem ist:

const char *foo = "Der Abstand zwischen "
  "\xb5" "1 und \xb5" "2 betr\xe4gt: %f";

(\xb5 -> µ)

Wenn man "\xb51" schreiben würde, wäre das (wide) char mit dem Wert
0xb51 gemeint, was ja nicht ganz das ist, was man haben möchte.  Eine
ähnliche Vorgehensweise muß man prinzipiell auch bei Oktalzeichen
machen, allerdings ist dort die mögliche Kollision mit den
nachfolgenden Zeichen seltener.  Es ist aber eine irrige Annahme, daß
oktal angegebene Zeichen immer mit exakt drei Stellen angenommen
würden und danach automatisch beendet sind.  Kann sein, daß das im
pre-C89 mal so war (,,K&R C'').

Außerdem kann man natürlich das Sonderzeichen direkt in das string
literal schreiben, dann muß nur die Codierung des Entwicklungssystems
(bzw. dessen Editors) mit der des Zielsystems (des LCD in diesem
Falle) übereinstimmen.  Das ist bei vielen Unixen im Falle des LCD
gegeben, bei Windows hängt es sicher von der Umgebung ab, da dort von
MS-DOS CP437/850 über ,,ANSI'' (alias ISO 8859-1) bis zu UTF-8 alles
der Fall sein kann.

von theguywiththebrownhair785 (Gast)


Lesenswert?

Das mit dem \ funktioniert einwandfrei!
Hatte das selbe Problem (LCD 16*4, HITACHI HD44780) und nun läuft es.
Danke euch!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Klasse. Elf Jahre.

Der Burke&Hare-Award 2015 ist Dir sicher.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.