El único contra que he encontrado es que si introduces un texto con espacios, no guarda lo que haya después de un espacio.
Mi duda es: ¿es correcto el uso de esta forma del "string"?
Es correcto. En cuanto a leer una linea de texto puedes utilizar la función "getline", si necesitas ejemplos de su uso utiliza el buscador de los foros.
A ver si me podéis responder otra duda: en las tablas y strings ¿siempre hay que dejar un último elemento para la marca final (\0)?
Solo si se trata de un array de caracteres (por ejemplo "char linea[100]") y en el se piensa almacenar una cadena (el '\0' indica el final de ella).
quiero decir, si queremos crear una tabla o un string de 30 elementos, hacemos "string cadena[30]", donde podemos usar los espacios del 0 al 29 (30 elementos) pero nunca el último (posición 30), ¿es asi?.
Me parece una confusión:
* Con los arrays de caracteres no hay opción mas que reservar un elemento para el cero porque es obligatorio (si no hay '\0' no hay cadena).
* Cuando se declara un array se indica el numero de elementos, por ejemplo:
string linea[100];
Esa declaración indica que el array consta de 100 elementos a los cuales se accede mediante los indices 0 .. 99. El elemento "linea[100]" no existe ya que seria el indice del elemento 101 y no hay tal en el array.
Un saludo