首页 >后端开发 >C++ >为什么字符串文字到'char*”的转换在 C 中有效但在 C 中无效?

为什么字符串文字到'char*”的转换在 C 中有效但在 C 中无效?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-15 12:25:15296浏览

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

为什么从字符串文字到 'char*' 的转换在 C 中有效但在 C 中无效

在 C 的 § C.1.1 中11 标准 (ISO/IEC 14882:2011),声明了赋值 char* p = "abc" 无效的。但是,这种转换在 C 中仍然有效。为什么会出现这种情况?

C 中已弃用隐式转换

在 C 03 之前的 C 版本中,从'char*' 的字符串文字是有效的,尽管已被弃用。字符串文字应被视为“char const *”,因为如果没有未定义的行为,则无法修改其内容。

显式转换仍然有效

尽管隐式转换已弃用在 C 11 中,显式转换仍然有效。为了使代码编译,可以添加强制转换: char* p = (char*)"abc".

强制转换的缺点

但是,这种显式转换不“修复”代码。它只是允许编译器接受赋值。修改字符串文字的潜在问题仍然存在。

解决方案:使用正确的类型

处理字符串文字的正确方法是使用正确的类型,' char const *':char const *p =“abc”。这种方法在 C 和 C 中都是有效且安全的。

C 中的理由

转换在 C 中仍然有效,因为大量现有代码依赖于它。标准委员会认为在没有适当警告的情况下破坏此代码是不可取的。

以上是为什么字符串文字到'char*”的转换在 C 中有效但在 C 中无效?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn