Hola.
Tengo una duda en Ansi C.
Estoy haciendo un programa que levanta un archivo txt el cual tiene muchas palabras. Todas estas palabras las guarda en un array del tipo
char [cantidad de palabras][largo de palabra]
El problema radica cuando supera X cantidad de palabras pues como que no da el tamaño del Array del CHAR.
Qué me recomiendan para solventar este problema?
Creo que lo logico seria ir levantando el archivo parte por parte, no?
Yo no usaria char[cantidad][largo], porque tenes que estimar la cantidad maxima de palabras y el largo maximo de las mismas.
Esto te lleva a desperdiciar memoria en el mejor de los casos, y a pisar estructuras en el peor.
Lo que yo haria es hacer un struct con un string y un puntero a string y hacer una lista encadenada. usando malloc tomas memoria a demanda.
Quizas sea un poco ineficiente el metodo de tomar memoria ya que el SO en realidad toma memoria en pedazos que puede asemejarse a clusters de discos, pero es mas seguro que el primer metodo.
no te olvides de hacer free de lo que alocaste con malloc porque sino generas memory leaks.
Respecto de levantar el archivo
Podes hacerlo a lo simple e ir leyendo caracter por caracter, cuando llega un espacio, coma, punto, etc. alocas memoria y generas la lista, asi hasta el EOF.
El otro metodo es hacer un buffer, llenarlo, buscar las palabras, hasta el final del buffer. Puede ocurrir que el buffer corta una palabra por el medio, por lo que hay que tener cuidado y esperar a la proxima lectura para procesar la ultima palabra (añadido con siguiente lectura o corte).
Gracias por la respuesta.!
Abrazo