我们正在使用(partition 2 1 input)
,而我们使用的lib正在使用char *
,因此我们转换为const unsigned char *
const unsigned char *
安全吗?任何陷阱?
答案 0 :(得分:1)
这是安全的。
char *str = "somestring";
str是一个常量,你可以将str指向另一个字符串:
str = "some";//right
但是您无法更改str现在指向的字符串
str[0]='q';//wrong
因此使用const将常量转换为常量
是安全的如果asdf()仅用于显示字符串,比如printf()或puts(),则不需要const,因为你没有更改字符串。
如果使用const,它将更安全。当你实现asdf()时,它将确保你不能写错了代码,如#34; str [0] =' q&# 39 ;;"因为你无法编译它。
如果没有const,您将在运行程序之前找到错误。
答案 1 :(得分:0)
如果它被该接口视为字符串,则应该没有任何问题。如果您不想,您甚至不需要在演员阵容中添加const
- 该部分是自动的。
答案 2 :(得分:0)
从技术上讲,将指针从一种类型转换为另一种类型总是安全的(除了函数指针和数据指针之间,除非您的实现提供允许的扩展)。只有解除引用是不安全的。
但取消引用指向任何char
签名的指针总是安全的(至少从类型别名的角度来看)。
答案 3 :(得分:0)
如果通过使用强制转换传递char*
预期unsigned char*
,则可能不会破坏编译器中的任何内容。 const
部分没有问题 - 它只是表明函数不会通过其指针修改参数。
在许多情况下,char
值是否被视为有符号或无符号并不重要 - 在执行算术或比较值的大小时,这通常只是一个问题。但是,如果函数被明确定义为采用unsigned char*
,我认为由于某些算术原因,它确实需要输入数据无符号。如果您将字符数据视为其他地方的签名,那么您的数据与该函数所需的数据之间可能存在不兼容性。
然而,在许多情况下,开发人员将“无符号”写为“我不会对此数据进行算术运算”,因此签名可能无关紧要。