Cuerdas en Delphi
—— Exceder de Internet
1: Varias cuerdas
Las cadenas son el tipo más útil de todos los tipos de datos en ObjectPascal. Muchas funciones pasan argumentos con cadenas. Dado que hay varias formas de definir y usar cadenas en Delphi, incluidas las cuerdas típicas (cadenas) en Pascal, cadenas largas apoyadas por Delphi (Ansistrings), matrices de caracteres similares a Lenguaje C (ArrayOfChar) y apuntando a los personajes Pointer (PCHAR), etc. El siguiente artículo hablará sobre las diferencias y precauciones de estos tipos en definición y aplicación.
1. Cadenas de pascal tradicionales
En Pascal, una cadena típica es una secuencia de caracteres de cierta longitud. Cada cadena tiene una longitud de conjunto (el valor predeterminado es 255), y el siguiente es un ejemplo:
Varilla
Dirección: cadena;
Código: cadena [50];
La dirección es una cadena con una longitud de 255, y la longitud máxima del código es 50.
La longitud tradicional de la cuerda Pascal no puede exceder los 255.
Puede usar la operación de concatenación de cadena "+" para concatenar cadenas juntas:
Resultado: = String1+String2;
2. Cadenas largas en Delphi
Además de apoyar las cuerdas cortas de Pascal tradicionales, Delphi también admite cadenas largas. Los personajes largos se llaman Ansistring. Las cadenas largas asignan dinámicamente la memoria, es decir, la memoria requerida para las cadenas se asigna solo cuando se usa cadenas, por lo que su longitud no es limitada. En Delphi, si usa String1: String como Type Descripción, String1 puede ser una cadena corta o una cadena larga, dependiendo de la configuración del interruptor $ H en el compilador. El valor predeterminado es $ H+, lo que representa la cadena Long ANSI. Las cadenas largas terminan con nulo, lo que significa que las cadenas largas son totalmente compatibles con las cuerdas de extremo nulo en el lenguaje C.
La longitud máxima de una cadena se puede establecer a través de la función SetLength:
SetLength (String1,100);
3. Matriz de personajes similar a C
Se puede usar una matriz que comienza con 0 para almacenar cadenas que terminan con NULL. La siguiente definición:
Varilla
Nombre: Array [0..50] OfChar;
4. Puntero PCHAR
Si se ha establecido el Ejecutaryntax en Delphi (predeterminado), la matriz de caracteres que comienza con 0 es totalmente compatible con el puntero PCHAR que apunta al personaje, porque el nombre de la matriz de caracteres que comienza con 0 es el puntero que apunta al primer carácter de la matriz de caracteres . Puede pagar directamente la cadena al puntero PCHAR. Por ejemplo:
varilla
P: pChar;
Comenzar
P: = 'helloworld';
fin;
De esta manera, P apunta a un trozo de memoria que almacena la cadena 'Helloworld' y termina con NULL.
Muchas funciones API de la interfaz del programa de aplicaciones de Windows requieren el tipo PCHAR como parámetro. Al usar el puntero PCHAR, primero usa la función GetMem (VARP: Pointer; Size: Integer) para aplicar la función de la memoria. Liberar memoria. Por ejemplo:
Varwindir, sysdir: pchar;
Comenzar
GetMem (Windir, 256); {Asignar memoria para punteros}
GetWindowsDirectory (Windir, 128); {Pon el directorio de instalación de Windows a Windir}
ShowMessage ('WindowsDirectoryis'+Windir); {show diente}
Fin;
Dos: conversión de cadenas
Lo anterior presenta la definición y el uso de cuatro tipos de cadenas en Delphi. Dado que varias funciones tienen diferentes requisitos para los tipos de parámetros de cadena, se requiere conversión de tipo de cadena.
1. Puede usar STPA para convertir una cadena que termina con NULL en una cadena corta Pascal. StrpCopy completa la conversión opuesta.
2. Debido a que las cadenas largas terminan con NULL, puedes convertir cadenas largas a tipo PCHAR con Cast. El uso es: PCHAR (S), S es una cadena larga. Casting devuelve un puntero al primer carácter de la cadena larga, y la cadena puntiaguda termina con NULL. Por ejemplo:
Varilla
Leyenda, mensaje: cadena;
Leyenda: = '¡Helloworld!';
Mssage: = 'thisSatESTOFLongString';
MessageBox (0, PChar (Mensaje), PCHAR (Título), MB_OK);
Resumen: al usar cadenas en Delphi, siempre debe estar claro sobre el tipo de cadena para evitar confusiones. Al comprender las cadenas, debe vincular las cadenas con punteros y asignaciones de memoria para mejorar la comprensión.