![]() |
Punteros Strings
Hola:
Me gustaría realizar una función donde reciba un string y se modifique dentro de la misma función, pero no tengo claro los punteros. Ej:
|
Hola,
No es necesario que uses punteros, puesto que puedes pasar un parámetro como referencia, de modo que puedes modificarlo en la función o procedimiento:
|
Hola:
En principio la función que me has pasado, si que lo cambia dentro de la función, pero cuando regresa la variable permance igual. Buscando por internet he visto la solución: Código Delphi [-] procedure TForm1.CambiaCadena(Cadena: pstring); begin cadena^ := cadena^ + ' algo más'; end; procedure TForm1.Button1Click(Sender: TObject); var cadena : string; begin cadena := 'Hola'; cambiacadena(@cadena); showmessage(cadena); end; La duda que tengo, es si un string es un puntero, porque no se comporta como tal. Saludos, JL |
Hola,
Cita:
|
jlrbotella, viendo tu código he detectado dos errrores:
1. ¿Quieres una función o procedimiento? Porque primeramente mencionas una función, pero en tu código hablas de un procedure. 2. Es lógico lo que planteas hacer. Pero tiene una gravísima falla. Si declaras a tu código como un procedimiento necesariamente debes indicar que el parámetro debe ser suministrado por valor y en tu ¡código no lo haces! Es por ello que el resultado que muestra es incorrecto. Si lo declaras como función, el valor obtenido será el correcto y ya no es necesario que el parámetro sea pasado por valor. En sintesis lo que necesitas es:
O bien: Escoje la que más te guste. No es necesario que andes operando con punteros. Saludos, |
Ampliando un poco más:
Lo que hace delphi es pasar el parámetro como constante, creando una copia del valor en la pila, se permite que modifiques el valor de la variable, pero los cambios solo se verán dentro de esa rutina, por ejemplo, ejecuta esto y lo comprenderás:
Saludos |
Cita:
Por una de estas:
OJO: Cambia solo una de las dos, si cambias las dos, el resultado será el mismo. Hablas de funcion y de punteros, pero en tu código no estas utilizando nada de esto y, segun parece, para lo que quieres hacer no los necesitas, con ese procedimiento tienes. Lo que pasaba es que estabas mostrando el valor de cadena, y en realidad estabas modificando el de ValorOriginal, entonces lo que tienes que hacer es mostrar el valor que modificas. |
Cita:
Un string de delphi es algo mucho mas complejo que un puntero, se necesitaria un post largo para explicar su funcionamiento interno. Hay que tener cuidado si se decide usar un puntero para modificar un string, ya que si no se fuerza previamente que se haga una copia unica de la variable string pueden acabar modificandose un monton de variables strings distintas que contengan el mismo texto y que se encuentren definidas en cualquier otra parte del programa. Saludos |
La franja horaria es GMT +2. Ahora son las 21:13:06. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi