2010-04-05 106 views
2

所以,我有两种类型的时刻:const的无符号字符*为char *

const unsigned char* unencrypted_data_char; 
string unencrypted_data; 

我试图从一个执行一个简单的数据转换到另一个(串 - > const的无符号字符*)

其结果是,我有以下几点:

strcpy((unencrypted_data_char),(unencrypted_data.c_str())); 

不过,我收到的错误:

error C2664: 'strcpy' : cannot convert parameter 1 from 'const unsigned char *' to 'char *' 

有什么建议吗?我认为使用reinterpret_cast会有所帮助,但似乎没有什么区别。

回答

9

你不能写入const char *,因为每个char指向的是const

strcpy 写入第一个参数。因此错误。

不要unencrypted_data_char常量,如果你打算写它(并确保你已经分配了足够的空间吧!)

和的strcpy的局限性提防。确保你知道你的缓冲区有多大需要在提前,因为的strcpy不会停止,直到它得到足够 :)

+0

不幸的是,它不是我的选择,使其不变。 AES加密函数的参数,我传递unencrypted_data要求它的形式是“const unsigned char”,因此我的问题。 – BSchlinker 2010-04-05 02:18:56

+4

BSchlinker,这不是问题。 'unsigned char *'可以隐式转换为'const unsigned char *'。 – 2010-04-05 02:21:16

+9

不,不 - 如果一个函数需要像'void f(const char *)'这样的东西,它只是说* it *不会写入它!它不会阻止你给它一个可变的缓冲区。 – 2010-04-05 02:22:15

0

以及如果unencrypted_data_char点,这只是读取的存储器,你最好不要要在其上写入任何数据,它肯定会导致段错误。

如:

const char *a="abc"; 

尖为可读的只读存储器

如果unencrypted_data_char是常量,只是因为你让它(如为const char * A = B),以及你可以const_cast会使用< char *>(a)将其转换。

如果从const char *转换为unsigned char *。

1.您需要将const char *转换为char * .use const_cast。

2.从char *转换为unsigned char *。使用reinterpret_cast。

相关问题