Строковые литералы хранятся в разделе памяти, доступном только для чтения.Любая попытка изменить содержимое строкового литерала вызывает Undefined Behavior (ошибка сегментации в большинстве реализаций).
Используйте массив символов вместо
char str[] = "HelloGuys";