В Си массивы не растут автоматически.
sms
имеет определенную длину (4, в данном случае - три буквы и завершающий NULL). Когда вы вызываете strcat
, вы пытаетесь добавить символы в этот массив после его длины.
Это неопределенное поведение, которое нарушит вашу программу.
Если бы вместо этого вы выделили массив с достаточно большим размером для размещения обеих строк, все будет в порядке:
char sms[9] = "gr8";
strcat (sms, " & :)");
C ++ имеет (в основном) те же ограничения на массивы, что и C. Тем не менее, он предоставляет средства более высокого уровня, благодаря которым вам не приходится иметь дело с массивами большую часть времени, например std::string
:
#include <string>
// ...
std::string sms = "gr8";
sms += " & :)";
Причина, по которой это лучше, заключается в том, что вам не нужно заранее знать, какой длины будет ваша строка. C ++ увеличит базовое хранилище в памяти для вас.