2010-04-05 105 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。

相關問題