А ты уверен, что память не портится у тебя в setStr() копирование идёт только если длинна строки > длинны буфера, и копируешь ты всю строку целиком, попутно создавая повреждение памяти. Ну и про \0 символ тебе уже написали выше. Вообще есть strdup() но он вне стандарта.