Also, wie hier ja schon angemerkt wurde, reservierst du mit new Platz für ein Element des angegebenen Types. Mit new [] Platz für die angegebene Anzahl von Elementen des angegebenen Types.
Passend zu new gibt es delete zum löschen und zu new [] gibt es delete [].
Dann muss du auch SetWindowText buffer übergeben (in den du mit sprintf geschrieben hast), um nicht den alten Text wieder zu sehen.
Dann gibt es die Möglichkeit die Länge des Textes, den du mit GetWindowText bekommst heraus zu bekommen. Genau genommen mehrere, die eine empfehlenswerter als die andere
GetWindowTextLength ist eine davon. Wenn nicht -1 zurück gegeben wird, kannst du einen Array von Zeichen mit der Größe der zurückgegebenen Zahl + 1 anlegen (Terminierungszeichen).
Dein Buffer muss dann nur 9 Zeichen Länger sein, um " hallo123" ebenfalls beinhalten zu können. So verschwendest du relativ wenig Speicher und hast auf jedenfall genug Platz für den kompletten Fenstertext.