Heim >Backend-Entwicklung >C++ >Warum sind Konvertierungen von String-Literalen in „char*' in C gültig, in C jedoch ungültig?

Warum sind Konvertierungen von String-Literalen in „char*' in C gültig, in C jedoch ungültig?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-15 12:25:15296Durchsuche

Why Are String Literal to `char*` Conversions Valid in C but Invalid in C  ?

Warum die Konvertierung von String-Literal in „char*“ in C gültig, aber in C ungültig ist

In § C.1.1 des C 11 Standard (ISO/IEC 14882:2011) wird die Zuweisung char* p = „abc“ für ungültig erklärt. Allerdings ist diese Konvertierung in C immer noch gültig. Warum ist das so?

Implizite Konvertierung in C veraltet

In C-Versionen bis C 03 erfolgt die Konvertierung von Ein String-Literal für „char*“ war gültig, wenn auch veraltet. String-Literale sollten als „char const *“ behandelt werden, da ihr Inhalt nicht ohne undefiniertes Verhalten geändert werden kann.

Explizite Konvertierung bleibt gültig

Obwohl die implizite Konvertierung veraltet war in C 11 bleibt eine explizite Konvertierung gültig. Um den Code kompilieren zu lassen, kann eine Umwandlung hinzugefügt werden: char* p = (char*)"abc".

Nachteile der Umwandlung

Diese Konvertierung ist jedoch explizit „repariert“ den Code nicht. Es ermöglicht dem Compiler lediglich, die Zuweisung zu akzeptieren. Die potenziellen Probleme beim Ändern des String-Literals bestehen weiterhin.

Lösung: Verwenden Sie den richtigen Typ

Der richtige Umgang mit String-Literalen besteht darin, den richtigen Typ zu verwenden, ' char const *': char const *p = "abc". Dieser Ansatz ist sowohl in C als auch in C gültig und sicher.

Begründung in C

Die Konvertierung bleibt in C gültig, da ein erheblicher Teil des vorhandenen Codes darauf basiert . Das Brechen dieses Codes ohne entsprechende Vorwarnung wurde von den Standardkomitees als unerwünscht angesehen.

Das obige ist der detaillierte Inhalt vonWarum sind Konvertierungen von String-Literalen in „char*' in C gültig, in C jedoch ungültig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn