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)
请注意:var是unsigned char *这里 - 它的数据类型超出了我的控制范围。
两个问题:
strcpy?C++std::strcpy严格检查需要 achar*并且您的变量var是 an 的类型unsigned char*。
幸运的是,在这种情况下,将指针强制转换为如下所示是完全安全的char*:
std::strcpy(reinterpret_cast<char*>(var), "string");
Run Code Online (Sandbox Code Playgroud)
这是因为,根据标准,char、unsigned char和signed char可以彼此互为别名。