Funciones end and erase en C?

Iniciado por bertamax, 1 Agosto 2010, 20:18 PM

0 Miembros y 1 Visitante están viendo este tema.

bertamax

Tengo el siguiente codigo en C++:

.
.
.
string subdir=dirname;
string::iterator its=subdir.end();
its--;
subdir.erase(its);
subdir+=file1.cFileName;
.
.
.

Y me gustaría transformarlo a código C, pero tengo problema con las funciones end y erase porque no existen en C y no sé cuales podrían ser sus equivalentes.

Muchas gracias

Foxy Rider

#1
Hola, te explico, la función end de std::string, retorna un iterador ( en la librería estándar se usan iteradores para poder recorrer contenedores, es como un puntero a una posición en un contenedor ) al próximo elemento después del último caracter en la cadena, es decir, al final ... (lo opuesto a begin, que retorna el principio de la cadena)

En en caso de erase, como bien su nombre dice, borra un caracter de la cadena, y la posición donde se borra está dada por el iterador (se borra el último caracter) ... y después se le concatena otra cadena usando el operador +
Las funciones en C que te ayudarían sería strlen() y strcat() en principio, pero como el manejo de memoria no está abstraído en clases como string, vas a tener que hacerlo a mano con malloc(), realloc()* y free()
Acordate que por cada vez que pidas memoria con funciones tipo malloc/realloc y calloc, tenés que liberarla sí o sí con free, sino vas a tener una fuga de memoria en el programa ...
Deberías leer de punteros y manejo de memoria antes ... no es algo que tome mucho leer, te cedo el link de conclase, pero quizá alguien conozca algo mejor -> http://c.conclase.net/curso/index.php?cap=012#inicio (es un curso de C++, pero sirve)
Y ya que vas a lidiar con memoria y funciones como strcat(), te dejo > este link < de lo que no hay que hacer, es decir, errores comunes en la gente que recién arranca a programar

Saludos y suerte !

P.S : Tiene pinta de ser un código un tanto guarro ...

* : No necesariamente, pero acordate de pedir siempre lo que uses, no desperdicies memoria ... después siempre podés pedir más !

bertamax

Gracias, creo que lo sabí resolver bien  ;-)