Heim >Backend-Entwicklung >C++ >Warum sind Konvertierungen von String-Literalen in „char*' in C gültig, in C jedoch ungültig?
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!