Const без знака char * to char * - PullRequest
       10

Const без знака char * to char *

2 голосов
/ 05 апреля 2010

Итак, у меня сейчас два типа:

const unsigned char* unencrypted_data_char;
string unencrypted_data;

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

В результате получилось следующее:

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

Однако я получаю сообщение об ошибке:

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

Есть совет? Я думал, что использование reinterpret_cast поможет, но, похоже, это не имеет значения.

Ответы [ 2 ]

9 голосов
/ 05 апреля 2010

Вы не можете писать в const char *, потому что каждый символ, на который указывает const .

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

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

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

0 голосов
/ 03 апреля 2013

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

например:

    const char *a="abc";

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

если unencrypted_data_char является const только потому, что вы позволите ему быть (например, const char * a = b), то вы можете использовать const_cast (a) для его преобразования.

при преобразовании из const char * в unsigned char *.

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

2.conver от char * к unsigned char *. используйте reinterpret_cast.

...