const char*与char*、unsigned char*相互转换问题
const char*与char*相互转换的问题也是老生常谈的问题了,以前研究过很多次,时间长了还是忘记,在回顾一下。以前我的记忆是:限制多的不能赋值给限制少的一、核心结论(C/C++ 硬性规则)char *→const char *:可以直接隐式转换,不用强转(安全、放宽只读限制)const char *→char *:禁止隐式转换,必须强制类型转换(危险,抛弃只读约束)1)char* 转 const char*(隐式合法)原理:把可写指针变成只读指针,不会修改原始数据,编译器允许自动转换。 示例:char buf[100] = "test"; char *p = buf; // 无需强转,直接赋值 const char *cp = p;2)const char* 转 char*(必须强转,否则报错 / 警告)原理:const代表内存只读,强行转成可写指针会破坏常量保护,编译器阻止隐式转换。const char *cp = "abc"; char *p = cp; // 报错,非法隐式转换 // 正确写法,显式强制转换 char *p = (char *)cp;二、结合你前面 unsigned char /char 的场景补充char *和unsigned char *双向都不能隐式互转,两边互相赋值、传参都要强制转换,和 const 规则不一样:unsigned char ubuf[10]; char buf[10]; char *p1 = ubuf; // 警告/报错,类型不匹

相关新闻