char* 和 unsigned char* 之间不兼容?

Has*_*aan 5 c++ casting char-pointer

以下代码行会在 HP-UX 的 C++ 编译器中生成编译器警告:

strcpy(var, "string")
Run Code Online (Sandbox Code Playgroud)

输出:

error #2167: argument of type "unsigned char *" 
    is incompatible with parameter of type "char *"
Run Code Online (Sandbox Code Playgroud)

请注意:varunsigned char *这里 - 它的数据类型超出了我的控制范围。

两个问题:

  1. 在这两种类型的上下文中,不兼容是什么意思?如果编译器被迫接受转换会发生什么?一个例子将不胜感激。
  2. 假设我必须使用,什么是使上述代码行工作的安全方法strcpy

Gal*_*lik 4

C++std::strcpy严格检查需要 achar*并且您的变量var是 an 的类型unsigned char*

幸运的是,在这种情况下,将指针强制转换为如下所示是完全安全的char*

std::strcpy(reinterpret_cast<char*>(var), "string");
Run Code Online (Sandbox Code Playgroud)

这是因为,根据标准,charunsigned charsigned char可以彼此互为别名。