给定指向字符串的const指针,如何将其发送到获取非const指针的字符串的函数
例如:
功能 - int Func(char* str);
,我想这样做:
const char* s=malloc(3);
int n=Func(s);
如何将s
发送给Func(但s
必须来自const char*
类型,我无法更改功能Func )?
答案 0 :(得分:4)
在形式上,你永远不能那样做。从const限定指针转换为非const限定指针的需要总是意味着程序设计是坏的。很可能糟糕的设计在于某些第三方代码没有正确实现const
正确性。
在您的特定情况下:您需要修改数据,然后您可能在调用者代码中使用了错误的类型。或者该函数不需要修改数据,在这种情况下,函数编写错误,没有const正确性。
在实践中,只要您知道数据的实际类型,C就允许所有类型的疯狂转换。在这种情况下,从malloc
返回的数据没有类型,它是可读/写的。它被分配了一个"有效类型"在您第一次访问该位置时。
因此,如果Func
可能会修改数据但调用者不会,那么编写
int n=Func((char*)s);
所有关于实际存储在指定位置的数据类型。
答案 1 :(得分:2)
您可以将其强制转换为char *
func((char *) s);
也许您需要使用-fpermissive编译它才能工作