如何将const指针发送到c中的非const指针?

时间:2018-04-24 09:40:35

标签: c function pointers const

给定指向字符串的const指针,如何将其发送到获取非const指针的字符串的函数 例如:
功能 - int Func(char* str);,我想这样做:

const char* s=malloc(3);  
int n=Func(s);

如何将s发送给Func(s必须来自const char*类型,我无法更改功能Func )?

2 个答案:

答案 0 :(得分:4)

在形式上,你永远不能那样做。从const限定指针转换为非const限定指针的需要总是意味着程序设计是坏的。很可能糟糕的设计在于某些第三方代码没有正确实现const正确性。

在您的特定情况下:您需要修改数据,然后您可能在调用者代码中使用了错误的类型。或者该函数不需要修改数据,在这种情况下,函数编写错误,没有const正确性。

在实践中,只要您知道数据的实际类型,C就允许所有类型的疯狂转换。在这种情况下,从malloc返回的数据没有类型,它是可读/写的。它被分配了一个"有效类型"在您第一次访问该位置时。

因此,如果Func可能会修改数据但调用者不会,那么编写

是完全安全的
int n=Func((char*)s);

所有关于实际存储在指定位置的数据类型。

答案 1 :(得分:2)

您可以将其强制转换为char *

    func((char *) s);

也许您需要使用-fpermissive编译它才能工作