groupName2 = malloc(strlen(groupName + 2)); дык. потому

groupName2 = malloc(strlen(groupName + 2)); дык. потому что тута берется кусок от groupName, начиная с третьего символа... а тута: groupName2 = malloc(strlen(groupName) + 2); просто резервируется кусок памяти размером длина groupName + 2 байта хотя, наверное, это будет еще корректнее: groupName2 = malloc(strlen(groupName + 2) + 2); но точно не уверен