Bueno, ahi va otras funciones para manejo de strings en memoria
CODIGO:
[code language="bennu"]
//------------------------------------//
//Tipo de dato
//------------------------------------//
#DEFINE MyString CHAR POINTER
//------------------------------------//
//Convierte MyString en STRING
//------------------------------------//
FUNCTION MyString get_string(STRING text)
PRIVATE
MyString str;
INT n;
BEGIN
str=realloc(str,sizeof(char)*(len(text)+1));
FROM n=0 TO len(text)
str[n]=text[n];
END
str[len(text)+1]=0;
RETURN str;
END
//------------------------------------//
//Convierte STRING en MyString
//------------------------------------//
FUNCTION STRING set_string(MyString text)
PRIVATE
STRING str="";
INT n;
BEGIN
n=0;
WHILE (text[n]!=0)
str=str+text[n];
n++;
END
RETURN str;
END
//------------------------------------//
//Inicia un string
//------------------------------------//
FUNCTION MyString String_New();
PRIVATE
MyString text;
BEGIN
text=alloc(sizeof(CHAR));
RETURN text;
END
//------------------------------------//
//Setea un string
//------------------------------------//
FUNCTION MyString String_Set1(MyString text,STRING Valor);
BEGIN
free(text);
text=get_string(Valor);
RETURN text;
END
#DEFINE String_Set(t,v) t=String_Set1(t,v)
//------------------------------------//
//Devuelve el string
//------------------------------------//
FUNCTION STRING String_Get(MyString text)
BEGIN
IF (text)
RETURN (set_string(text));
ELSE
RETURN "";
END
END
//------------------------------------//
//Libera el string
//------------------------------------//
FUNCTION STRING String_Kill1(MyString POINTER text)
BEGIN
free([text]);
[text]=NULL;
END
#DEFINE String_Kill(t) String_Kill1(&t)
[/code]
EJEMPLO:
[code language="bennu"]
PROCESS TEST()
PRIVATE
MyString text;
STRING aux;
BEGIN
text=String_New(); //Crea el texto
String_Set(text,"prueba"); //Setea el texto
aux=String_Get(text); //Develve el texto
say(aux); //aux="prueba"
String_Kill(text); //Elimina el texto
say(text); //text = NULL
aux=String_Get(text); //Pide un texto que ya no existe
say(aux); //aux=""
END
[/code]
Saludos
EDIT: Lei mal... y cual es la aplicacion para esto?
para poder hacer listas dinamicas de strings... que actualmente no se puede , vos me dijiste cuando lo intente hacer hace un tiempo que fenix cambia los identificadores en memoria... o no se bien como es..
o sea...
no podes hace
STRING * lista;
lista = alloc(sizeof(string) *10)
esto no se puede hacer... va , a mi x lo menos me fallaba