C/Visual C - ¿Cómo trabajar con cadenas de longitud indefinida?

 
Vista:

¿Cómo trabajar con cadenas de longitud indefinida?

Publicado por Ophidian (3 intervenciones) el 14/06/2007 04:28:34
Ante todo, espero puedan ayudarme!! XD

(1) Cuando trabajo con cadenas cuya longitud tiene límite no hay problema xq las declaro así: char cad[n]; Y de esa forma trabajo con cadenas de longitud <= n perfectamente.

(2) Pero al momento de trabajar con cadenas cuya longitud no tiene límite se me presenta un problema. Al declarar la cadena así: char *cad; Entiendo que tengo q asignarle memoria a cad utilizando malloc, sería algo así: cad=(char *)malloc(n*sizeof(char)); Es decir que la asignación de memoria depende (al igual que en el ejemplo anterior) de n, ¿Y si no sabemos cuanto es n? p.ej. ¿Si tengo q leer una cadena cuya longitud desconozco totalmente?

Help me!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Cómo trabajar con cadenas de longitud indefini

Publicado por fernando.gomez (1603 intervenciones) el 14/06/2007 06:31:14
1. En C no es necesario hacer un cast de void* a cualquier otro tipo de caracter, en este caso, char*, por lo que cad = malloc(n*sizeof(char)); es suficiente.

2. Cuando uno emplea cadenas dinámicas normalmente lo hace porque la longitud será variable. Pero el que sea variable no quiere decir que no se conozca; es decir, debería ser capaz de que en tiempo de ejecución tu programa calculase la longitud de la cadena.

3. Si no es posible saber cuánto vale "n" en tu ejemplo, probablemente te convenga rediseñar tu algoritmo. Es decir, no vale la pena plantearse ese escenario porque entonces es simplemente imposible.

4. A menos que vayas leyendo byte por byte de la cadena y en cada llamada vayas ubicando nueva memoria (i.e. llamando a calloc o realloc). Pero esto sería terriblemente ineficiente. En C++ se desarrolló un modelo para casos similares (no aquellos donde el valor de la memoria a ubicar es desconocido) llamados "allocators" o "ubicadores", y están disponibles en la librería estándar de C++. Pero desde luego, no aplican a este caso.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar