Использование
size_t new_size = wcslen(WcharArray);
size_t number_of_converted = 0;
this->newChar = new char[new_size];
wcstombs_s(&number_of_converted, this->newChar, new_size, WcharArray, new_size);
от
char *newChar = new char[wcslen(WcharArray)];
Во втором случае вы создаете локальную переменную. В Windows я бы использовал WideCharToMultiByte , чтобы сделать преобразование:
DWORD mb_size = WideCharToMultiByte(
CP_UTF8, // UTF-8 encoding
0, // flags
WcharArray, // wide char input
-1, // find the end of string
NULL, // no input, we want to know the necessary space
NULL, // no input size
NULL, // no default chars
NULL ); // no used default chars
this->newChar = new char[mb_size];
mb_size = WideCharToMultiByte(
CP_UTF8, // UTF-8 encoding
0, // flags
WcharArray, // wide char input
-1, // find the end of string
this->newChar, // target string
mb_size, // target string size
NULL, // no default chars
NULL ); // no used default chars