Q:

значение в переменной

Подскажите плиз 
std::string str; // объявили переменную типа стринг 
FunctionName(param_1, param_2, &str); // функция добавила в строку символы 
// после выполнения FunctionName переменная str = "hello"

unsigned char* charArr = (unsigned char*)str.c_str(); 
// charArr что то из следующего = 
//      {0x68, 0x65, 0x6c, 0x6c, 0x6f}      - есть там ноль или нет ноля ?
// или  {'h', 'e', 'l', 'l', 'o', '\0'}     - если есть 0 то каким символом или кодом символа он представлен ? 
// или  {0x68, 0x65, 0x6c, 0x6c, 0x6f, ???} - если есть 0 то каким символом или кодом символа он представлен ? 

теперь если  str = "";
charArr так же не содержит символов  
Что происходит  - компилятор оптимизировал присвоив charArr ссылку или указатель на str ???
Как правильно задать значение charArr чтобы после изменения str - charArr не оказался так же изменённым ???

A:

Вопрос : как правильно скопировать данные в unsigned char* charArr или unsigned char charArr[] - чтобы можно было изменять str
создаёте массив нужного размера + 
дополнительный байт для конца строки '\00'
unsigned char* charArr = new unsigned char[str.size()+1];

копируете строку в массив
memcpy(charArr,str.c_str(),str.size()+1);

