Ваш код не должен даже компилироваться, потому что size + 1 не является значением постоянной времени компиляции, изменяя строку
char string[size+1];
до
char string*=new char[size+1]
должен заставить ваш код компилироваться и выдавать правильный вывод, потому что вы создаете свой массив в куче (чтобы массив не уничтожался при возврате функции). Однако это означает, что вы должны уничтожить удалить его самостоятельно.
Так что это хорошая идея, чтобы изменить
std::cout << intToString(my_array, size);
К
char *string=intToString(my_array, size);
std::cout << string;
delete[] string;
Хотя обратите внимание, что ответы других верны, что вы должны использовать std :: string и std :: vector вместо массивов и массивов символов в целом, что вы сейчас делаете - это смешиваете c с c ++.