En este tipo de casos, cuando se desconoce el tamaño que puede tener un array hasta que el programa no es ejecutado, es necesario utilizar el 2º punto que han comentado:
memoria dinámica, además del conocimento del uso de
punteros.
Para reservar memoria dinámicamente en C++ se crea un puntero de la variable que quieres utilizar. Este puntero, inicialmente no apunta nada hasta que no le especifiques a donde quieres apuntar. Con el operador
new puedes reservar tanta memoria como especifiques.
Código C++:
Ver original#include <iostream>
int main() {
struct persona{
std::string nombre;
std::string direccion;
std::string numerotel;
};
int size;
persona *agenda = NULL; // Agenda es un puntero de tipo 'persona' inicialmente a nulo
std::cout << "Introduce tamaño: ";
std::cin >> size;
agenda = new persona[size]; // Se reserva memoria, agenda ahora es un array de SIZE personas
if (agenda != NULL) { // OJO: por cada 'new', siempre un 'delete'
delete[] agenda; // Liberar memoria reservada
agenda = NULL; // Apuntar otra vez a nulo (buena práctica)
}
}