Delphi - informacion sobre strings

 
Vista:

informacion sobre strings

Publicado por biT (11 intervenciones) el 06/02/2004 02:33:06
alguien sabe donde puedo encontrar informacion sobre el manejo interno de un string en delphi.
por ejemplo en C los strings son cadenas de caracteres y se sabe donde termina cuando se encuentra el 0, en vb es algo similar solo que cada caracter ocupa dos bytes, en delphi lei hace tiempo que el primer caracter del string es el tamano del string, y le sigue los demas caracteres que conforman el string.

entonces cuando hacen s := s + 'hola'
delphi crea crea un pedazo de memoria dinamicamente y copia ahi lo que habia en s y le agrega 'hola', asi pienso yo.
es por eso que quiero ver si hay una informacion sobre los trabajos que hace delphi internamete.

una pregunta tengo si es que todo lo que puse en verdad. si el primer caracter corresponde al tamaño del string, entonces el caracater maximo sera 255, no ?
por eso quiero leer bien

todo esto es porque si hago un mini compilador primero me gustaria que soporte string al estilo de delphi,
gracias
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:informacion sobre strings

Publicado por BlackTigerX (5 intervenciones) el 06/02/2004 15:35:02
la descripcion que tu das, corresponde a Turbo Pascal, asi es como era antes esto de los strings, ahora los strings son algo asi como arreglos dinamicos de memoria, pero Delphi lo hace muy facil, para saber la longitud de la cadena se sigue usando Length(Cadena), y ahora (por default) un String (que ahora es un un AnsiString) puede contener hasta 2GB de datos, esto es cuando la directiva {$H+} esta activa, que es lo default, si pone {$H-} entonces se comportara como ShortString y solo puedes poner 255 caracteres, como en los viejos tiempos, este tipo solo esta para compatibilidad hacia atras

una cosa importante tambien es que ahora ya no se puede accesar el elemento [0] de una cadena para saber la longitud, se debe usar Length()
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

RE:informacion sobre strings

Publicado por biT (11 intervenciones) el 07/02/2004 01:43:07
ya se que la funcion *Length* sirve para saber cuantos caracteres tiene una cadena, como *SetLength* se puede usar para reservar un espacio mas largo. Esa no era mi pregunta, mi pregunta es.. ¿ como delphi maneja los strings intername ?, ¿ los maneja como vb ?, ¿ como c/c++ ?

para que me estiendas:
por ejemplo C/C++ reserva un espacio en memoria (un arreglo de chars), y en el ultimo caracter de este espacio pone un character cero, entonces cuando C/C++ quiere saber la longitud de la cadena, busca por ese caracter cero.
ahora delphi cuando crea un espacio de memoria para guardar un string mayor a 255 bytes, ¿ pone un caracter cero al final para saber cuando acaba el string ?, ¿ como sabe la longitud de la cadena si es que no pone un cero ?, ¿ que guarda en el primer caracter, en el caso que lo haga cuando el string mide mas de 255 bytes ?

biT
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

RE:informacion sobre strings

Publicado por biT (11 intervenciones) el 07/02/2004 03:46:55
al no encontrar una documentacion acerca de eso, trate de analizar el programa con un debugger y asi ver como delphi maneja los strings internamente :-)

el string de delphi es similar a uno de c/c+ segun vi, es un array de caracteres y el ultimo caracter es 0 , supongo para que soporte el tipo PChar (char *), y lo que vi tambien es que los 4 bytes antes de donde comienza el array de caracteres esta la longitud de la cadena, supongo tambien para que sea mas rapido, asi no recorres todos los caracteres buscando por el cero, mas bien ves 4 bytes antes de la direccion del string y esos bytes corresponden a la longitud ;-)

biT
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

RE:informacion sobre strings

Publicado por Delfino (1216 intervenciones) el 09/02/2004 13:55:04
En Delphi hay dos tipos de strings, el short string y el long string, el primero tiene q tener el numero de caracteres predefinido y se hace mediante s[3] ej; ese cuarda el numero de caracteres en el caracter 0, por eso si se quiere acceder a sus chars mediante un array se empieza por el caracter 1, el caracter 0 es de uso interno (y de expertos), el segundo tipo de string lo aloca Delphi on punteros, o sea alocacion dinamica..
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