В тот момент, когда вы входите в домен std ::, вы не можете использовать memcpy. Это связано с тем, что все контейнеры std, включая строку, хранят данные в другом месте и хранят только указатели этих данных при себе. Поэтому, если вы просто делаете побитовое копирование (как в memcpy), вы точно не знаете, что скопировали.
Как предлагается, вместо использования простых массивов и memcpy используйте векторы и std :: copy соответственно. Это не даст преимущества быстрого копирования, как это делает memcpy, но гораздо надежнее, чем предыдущий метод.
Если вы все еще хотите придерживаться memcpy, то, как я объяснил, вы не можете использовать строку. В вашей структуре у вас будет двухмерный массив статической (стековой) памяти. чат [5] [MAX_STRING_LEN]. Все строки в ваших структурах должны быть сопоставлены с каждым из элементов этого массива. Теперь ваша структура будет состоять из чистых данных и без указателя, и, следовательно, вы можете использовать memcpy.
Но, пожалуйста, не делайте этого, просто используйте vector с std :: copy.