Строка - сплошной блок байт в памяти. (и массив тоже) . Попытаться изменить размер блока можно только тогда, когда он был выделен через malloc/calloc. Поэтому в Вашем случае можно только явно копию строки делать, как писал Булат
ЗЫ. А насчет C++ в комментариях - не Ваша цель сейчас. Цель на ближайшее будущее - понять работу с указателями. Булат написал "как", я пострался объяснить "почему именно так"
1) Выделить буфер в памяти достаточного объема,
2) Скопировать вашу строку "Hello" (strcpy),
3) Добавить в конец восклицательный знакт (strcat)
Взять C++ и воспользоваться классом std::string с его методом append().
Вряд ли же вы пишете прошивку МК, где непременно нужен именно Си.
Под виндой, линуксом с тем же успехом можно писать и на С++.
Или это прихоть вашего препода? Пусть препод вам учебники нужные выдаст, или методички - там в них должны быть описаны соотв. функции.
А вообще, надо было еще до вуза/колледжа самообразованием заниматься - учат то там вон как.
string str = "Hello";
str = str + "!";
Вообще-то это не строка, а массив символов (char[]). Массивы могут иметь динамический размер, а могут и определенный (всегда) , поэтому добавить туда элемент невозможно. Создается новый массив, размер больший на 1, и передаются в него значения:
char str[] = "Hello!";
char newstr[] = str + '!';
А в строках и динамических массивах все проще, там просто с помощью оператора '+=' добавляется символ: str += '!';
> string str = "Hello";
> char newstr[] = str + '!';
> str += '!';
Это вы о чем таком рассказываете? Ни в чистом Си, ни в С++ оператор + для строк не работает.
Тем более нет в чистом Си класса string.
Господа, о чем спор? Сама постановка вопроса некорректна. Но если исходить из того что, str это таки массив char[] а не строка, то в C# вот так все прекрасно работает: