为什么在 C 中允许字符串文字转换为 'char*' 但在 C 中不推荐
在 C 中,分配 a 是有效的字符串文字直接转换为“char*”指针,如下所示:
char* p = "abc";
但是,在 C 11 及更高版本中,此隐式转换已被删除,因为如果修改字符串文字,它可能会导致未定义的行为。 C 标准在第 C.1.1 节中明确指出,上述示例现在无效。
为了解决此问题,C 允许显式强制转换将字符串文字转换为“char*”指针。这种强制转换清楚地表明程序员了解潜在的风险并接受可能出现的任何后果的责任。
char* p = (char*)"abc"; // Valid with explicit cast
C 中的显式强制转换有两个目的:
但是,需要注意的是,即使使用显式强制转换,将字符串文字分配给 'char' 指针仍然不被认为是 C 中的最佳实践。更安全的方法是使用“const char”指针,它明确指示不应修改字符串文字:
char const *p = "abc"; // Valid and safe
这保证了字符串文字将保持不变,防止潜在的未定义
在 C 中,从字符串文字到“char*”指针的隐式转换仍然有效,因为大量遗留代码依赖于此行为。删除 C 中的隐式转换将会破坏大量现有程序。
以上是为什么 C 中允许直接字符串文字到'char*”转换,但在 C 中不推荐使用?的详细内容。更多信息请关注PHP中文网其他相关文章!