一个简单的C ++代码:
int main(){
unsigned char* t="123";
}
使用g ++编译时出现以下错误:
invalid conversion from ‘const char*’ to ‘unsigned char*’ [-fpermissive]
为什么?
答案 0 :(得分:23)
在C ++中,字符串文字具有常量字符数组的类型。例如,字符串文字"123"
的类型为const char[4]
。
在极少数例外的表达式中,数组被转换为指向其第一个元素的指针。
所以在这个宣言中
unsigned char* t="123";
初始值设定项的类型为const char *
。没有从const char *
到unsigned char *
你可以写
const unsigned char* t = reinterpret_cast<const unsigned char *>( "123" );
答案 1 :(得分:3)
另一种方法可以让你获得一个可修改的unsigned char
数组,如你原先想要的那样:
#include <cstdlib>
#include <iostream>
using std::cout;
using std::endl;
int main()
{
unsigned char ta[] = "123";
unsigned char* t = ta;
cout << t << endl; // Or ta.
return EXIT_SUCCESS;
}
如果您愿意,可以在两个声明中添加const
,以便在没有明确演员的情况下获取const unsigned char
。
答案 2 :(得分:1)
使用自定义宏时,从一种类型到另一种类型的转换很容易。所以这里有一组可以在任何平台上使用的宏(Windows,Linux,Solaris,AIX等......)
#define M_ToCharPtr(p) reinterpret_cast<char*>(p) // Cast to char*
#define M_ToWCharPtr(p) reinterpret_cast<wchar_t*>(p) // Cast to wchar_t*
#define M_ToConstCharPtr(p) reinterpret_cast<const char*>(p) // Cast to const char*
#define M_ToConstWCharPtr(p) reinterpret_cast<const wchar_t*>(p) // Cast to const wchar_t*
#define M_ToUCharPtr(p) reinterpret_cast<unsigned char*>(p) // Cast to unsigned char*
#define M_ToConstUCharPtr(p) reinterpret_cast<const unsigned char*>(p) // Cast to const unsigned char*
#define M_ToUCharPtr(n) reinterpret_cast<unsigned char*>(n) // Cast to unsigned char*
#define M_ToVoidPtr(p) reinterpret_cast<void*>(p) // Cast to void*
#define M_ToConstVoidPtr(p) reinterpret_cast<const void*>(p) // Cast to const void*
#define M_ToIntPtr(n) reinterpret_cast<int*>(n) // Cast to int*
#define M_ToConstIntPtr(p) reinterpret_cast<const int*>(p) // Cast to const int*
#define M_ToDoublePtr(n) reinterpret_cast<double*>(n) // Cast to double*
#define M_ToConstDoublePtr(n) reinterpret_cast<const double*>(n) // Cast to const double*
#define M_ToBoolPtr(n) reinterpret_cast<bool*>(n) // Cast to bool*
#define M_ToConstBoolPtr(n) reinterpret_cast<const bool*>(n) // Cast to const bool*
// General Cast
#define M_To(T, p) reinterpret_cast<T>(p) // Cast to T
在你的情况下
const unsigned char* t = reinterpret_cast<const unsigned char *>("UCHAR TO CONST UCHAR");
相当于
const unsigned char* t = M_ToConstUCharPtr("UCHAR TO CONST UCHAR");
答案 3 :(得分:0)
只需使用
在声明
char t [MAX_SIZE] =&#34; 123&#34 ;; //应该在之前定义MAX_SIZE
时间测试 strcpy()和 strncpy 函数