Forum: Compiler & IDEs C, ist die abschliessende Null bei Strings automatisch dabei?


von Micha (Gast)


Lesenswert?

ich bin grade etwas neben der Schiene, aber vielleicht weiss jemand die 
Antwort auf die eigentlich triviale Frage auf Anhieb. Wenn ich in C 
einen String wie im Beispiel gleich beim Anlegen initialisiere, ist die 
abschliessende Null dann automatisch mit dabei, oder muss ich die selber 
irgendwie hinten dranfrickeln?
1
uint8_t msg = "Liebe Freunde der Italienischen Oper!";

von Oliver S. (oliverso)


Lesenswert?

Ja

Oliver

von chris (Gast)


Lesenswert?

Nein, aber so gehts:

uint8_t msg[] = "Liebe Freunde der Italienischen Oper!";

ohne die Klammern kriegst du nen Compilerfehler/Warnung

Wobei ich für Strings lieber char verwenden würde

von Fabian O. (xfr)


Lesenswert?

Micha schrieb:
> ich bin grade etwas neben der Schiene, aber vielleicht weiss
> jemand die
> Antwort auf die eigentlich triviale Frage auf Anhieb. Wenn ich in C
> einen String wie im Beispiel gleich beim Anlegen initialisiere, ist die
> abschliessende Null dann automatisch mit dabei, oder muss ich die selber
> irgendwie hinten dranfrickeln?
> uint8_t msg = "Liebe Freunde der Italienischen Oper!";

Die ist automatisch dabei. Allerdings solltest Du es so schreiben:
1
char msg[] = "Liebe Freunde der Italienischen Oper!";
Das erzeugt eine Array, in das der String mit abschließender Null passt. 
Für Zeichenketten ist char der richtige Datentyp und nicht uint8_t.

von Micha (Gast)


Lesenswert?

sorry, die Klammern ohne Längenangabe hatte ich vergessen zu tippen, die 
gehören natürlich mit dazu.

Bei Verwendung des Typs char fügt C also die abschliessende Null 
automatisch an?
Bei uint8_t ist es eventuell fraglich(?), ok macht Sinn einen String im 
Zweifelsfall als char anzulegen.

von Fabian O. (xfr)


Lesenswert?

Micha schrieb:
> Bei uint8_t ist es eventuell fraglich(?), ok macht Sinn einen String im
> Zweifelsfall als char anzulegen.

Auch bei uint8_t wird die abschließende Null eingefügt. Alle Funktionen, 
die etwas mit dem String anstellen sollen, erwarten normalerweise aber 
einen char-Pointer und keinen uint8_t-Pointer. C wird die zwar implizit 
konvertieren und alles funktionieren, schön ists aber nicht. Je nach 
Compilereinstellung gibt es sogar Warnungen beim kompilieren.

von Peter II (Gast)


Lesenswert?

Micha schrieb:
> Bei Verwendung des Typs char fügt C also die abschliessende Null
> automatisch an?

nein, er fügt sie bei einem string " " an. IN welchen Type von Daten du 
es steckst spielt dabei keine rolle.

"test"

enthält also schon die 0 am ende, egal was damit passiert.

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.