将char *转换为const unsigned char *是否安全?

时间:2017-08-30 02:54:48

标签: c

我们正在使用(partition 2 1 input),而我们使用的lib正在使用char *,因此我们转换为const unsigned char *

const unsigned char *

安全吗?任何陷阱?

4 个答案:

答案 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*,我认为由于某些算术原因,它确实需要输入数据无符号。如果您将字符数据视为其他地方的签名,那么您的数据与该函数所需的数据之间可能存在不兼容性。

然而,在许多情况下,开发人员将“无符号”写为“我不会对此数据进行算术运算”,因此签名可能无关紧要。