Как насчет использования malloc
:
case 5: return malloc(sizeof(struct CPlaces));
Нет необходимости в break
, если вы уже вернетесь. Если хотите, можете добавить инициализацию перед возвратом.
Вызывающий должен знать фактический тип, чтобы он мог привести указатель обратно к правильному типу. Это, вероятно, будет означать дублирование оператора switch на сайте вызывающего абонента.