Const char *, как правило, являются предопределенными скомпилированными строками c, которые нельзя изменить, поскольку они заблокированы в исходном коде или получены из какого-то неизменного источника. Это отчасти потому, что они помечены как const, чтобы люди не пытались их изменить.
Самое простое решение этой проблемы - взять константный символ * и скопировать его в кучу, тогда он больше не будет постоянным.
Например:
#include <string.h> // for strdup
...
TString::TString(const char* pStr) {
m_pData = strdup(pStr); // this will malloc and copy the string accepting const char * as input.
}
Одна вещь, которую вам нужно учитывать, теперь m_pData находится в куче, поэтому в деструкторе вы захотите освободить эти данные, иначе у вас будет утечка памяти.
TString::~TString(){
free(m_pData);
}
Вы также захотите, чтобы в конструкторе TString () было также установлено значение m_pData = NULL.
Это будет работать со строками, но если это двоичные данные, т. Е. Терминатор не выделяет данные, используя mallo c и использует memcpy, например:
m_pData=(char *)malloc(m_nlength*sizeof(char));
memcpy(m_pData,pStr,m_nlength);
или некоторые такие.