Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error con longitud de cadena (https://www.clubdelphi.com/foros/showthread.php?t=84419)

danielmj 16-10-2013 22:58:12

Error con longitud de cadena
 
Hola, espero que podais ayudarme ya sé que parece una tonteria pero nada mas ver el resultado me ha dejado KO, a ver estoy usando la ventana por defecto de windows para mostrar directorios junto a unidades de red etc, el problema es que tengo este código que uso para hacer ciertas comprobaciones antes de usar un if.

Código Delphi [-]
label9.Caption:= IntToStr(length(tempPath));

Donde TempPath puede ser desde "C:\" hasta "C:\windows\system32\..." bien, si fuera solo la raiz del sistema, es decir "C:\" la longitud que deberia devolverme seria de 3, ¿entonces por que me devuelve 261 como la longitud de tempPath? Igual tiene su respuesta pero se me escapa, yo cuento 3 caracteres, la C, los : y la barra, ¿entonces?

Saludos y gracias.

Edito: Le he encontrado una solución o más bien un parche, en lugar de hacer la comparación con la longitud de TempPath, la hago con una etiqueta que almacena la cadena tempPath y a partir de la longitud de esta etiqueta, ya puedo realizar correctamente el if.

Saludos.

ecfisa 16-10-2013 23:49:05

Hola danielmj.

La questión es: ¿ De que tipo es tempPath ?

Si tempPath es de tipo string la función Length devolverá la longitud esperada, como por ejemplo en:
Código Delphi [-]
var
  tempPath: string;
begin
  tempPath := 'C:\';
  ShowMessage(IntToStr(tempPath)); // 3;
  ...

Pero intuyo que tempPath está declarada como array[0..260] of char... Y en ese caso tendrías que hacer:
Código Delphi [-]
var
  tempPath: array [0..260] of char;
  str : string;
begin
  tempPath := 'C:\';
  str := tempPath;
  ShowMessage(Format('Largo de tempPath: %d %sLargo de str: %d',[Length(tempPath), #10, Length(str)]))
...


Saludos :)

ecfisa 17-10-2013 12:18:32

Hola de nuevo.

Olvidé mencionar algo, también podes usar un moldeo de forma directa:
Código Delphi [-]
var
  tempPath: array [0..260] of char;
begin
  tempPath := 'C:\';
  ShowMessage(IntToStr(Length(string(tempPath)))); // 3

Saludos :)

danielmj 18-10-2013 16:02:33

Hola ecfisa, perdon por tardar en contestar,

es cierto estaba declarado como array :D ya va bien, gracias!

Ahora seguiré con esto, no puedo cogerlo todo el tiempo que quisiera, por eso voy a saltos con el codigo. un saludo


La franja horaria es GMT +2. Ahora son las 18:41:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi