Вы возвращаете указатель на данные, которые обрабатываются контейнером, поэтому строка c ++, которая выходит из области видимости, поэтому в конце функции деконструируется.То, что вы хотите сделать, чтобы получить точное поведение, которое вы описываете, это использовать выделение кучи, например так:
char* result = new char[fullID.length()+1];
std::copy(string.c_str(),string.c_str()+fullID.length()+1,result);
Что вам нужно, это вернуть строку c ++ напрямую, потому что я гарантирую, что вы забудетев конце концов освободите эту строку.
const string checkMultiID(){
return fullID;
}