2010-04-05 1 views
2

Итак, у меня есть два типа в данный момент:Const неподписанного символ * на символ *

const unsigned char* unencrypted_data_char; 
string unencrypted_data; 

Я пытаюсь выполнить простое преобразование данных из одного в другой (строку -> константного символа без знака *)

в результате, у меня есть следующие:

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 *, потому что каждый символ указал на const.

strcpy пишет к первому аргументу. Отсюда и ошибка.

Не делайте unencrypted_data_char сопзЬ, если вы планируете написать к нему (и убедитесь, что вы выделили достаточно места для него!)

И остерегайтесь ограничений STRCPY в. Убедитесь, что вы знаете, насколько велик ваш буфер должен быть заранее, потому что зЬгсру не останавливается, а пока он получает достаточно :)

+0

К сожалению, это не мой выбор, чтобы сделать его постоянным или нет. Параметры функции шифрования AES, которые я передаю unencrypted_data, требуют, чтобы она находилась в форме «const unsigned char», следовательно, моя проблема. – BSchlinker

+4

BSchlinker, это не проблема. 'unsigned char *' может быть неявно преобразован в 'const unsigned char *'. –

+9

Нет, нет - если функция принимает что-то вроде 'void f (const char *)', это просто говорит, что * it * не будет писать на нее! Это не мешает вам предоставлять ему изменяемый буфер. –

0

хорошо, если unencrypted_data_char указывают на память, который доступен только для чтения, лучше не для записи любых данных на нем, это, безусловно, вызовет ошибку сегмента.

например:

const char *a="abc"; 

заостренный на читаемую только память

если unencrypted_data_char является сопзЬ только потому, что пусть это будет (как сопзИте полукокс * а = Ь), а вы могли бы использовать const_cast < char *> (a), чтобы преобразовать его.

если преобразование из const char * to неподписанный char *.

1. Вам нужно преобразовать из const char * в char * .use const_cast.

2.конвер из char * to неподписанный char *. используйте reinterpret_cast.

 Смежные вопросы

  • Нет связанных вопросов^_^