Konwesja

0

Jak dokonac Konwesji PChar na String i Odwrotnie?
Czy Char i PChar to to samo? Jeśli nie to czym się róznią?

0

Char to pojedyńczy znak. PChar to wskaźnik do łańcucha zakończonego znakiem o kodzie 0 (lub pierwszego znaku tego łańcucha, w zależności od kontekstu - patrz deklaracja typu PChar: PChar = ^Char). Długi łańcuch (AnsiString lub po prostu string przy standardowych ustawieniach kompilacji) jest kompatybilny z łańcuchem PChar - wystarczy proste rzutowanie: PChar(LancuchString). Do krótkich łańcuchów (ShortString, string[n], gdzie n = 1..255) był jakieś funkcje konwertujące :) (nie pamiętam jakie, chyba gdzieś na początku FAQ jest :) )

0

StrPas

function StrPas(const Str: PChar): string;
Description
This function is provided for backwards compatibility only. To convert a null terminated string to a Pascal-type string, use a typecast or an assignment.

PChar

Long string to PChar conversions are not automatic. Some of the differences between strings and PChars can make conversions problematic:
-Long strings are reference-counted, while PChars are not.

  • Assigning to a string copies the data, while a PChar is a pointer to memory.
  • Long strings are null-terminated and also contain the length of the string, while PChars are simply null-terminated.
    Situations in which these differences can cause subtle errors are discussed in this section.
0

Dobra, zrozumiałem aluzję w postaci Help z Dephi, ale Problem jest taki:

Edit2.Text:=Reg.ReadString('ID1,Koniec');
dcb.Drive:=Reg.ReadString('ID1,Dysk');              //Tu wywala błąd Incompatybile types Char and String
dlb.Directory:=Reg.ReadString('ID1,Katalog');

ten dcb to DriveComboBox a dlb to DirectoryListBox

0

dcb.Drive:=Reg.ReadString('ID1,Dysk')[1];

Drive to ma byc Char (pojedynczy znak).

0

StrPas

Nie jestem super programistą najlepszym na świecie, ale wg mnie ta funkcja nie jest też za bardzo potrzebna. Ponieważ mi zawsze wystarczyło zwykłe rzutowanie na string:

string(jakasZmiennaPChar);
0

Nie jestem super programistą najlepszym na świecie, ale wg mnie ta funkcja nie jest też za bardzo potrzebna. Ponieważ mi zawsze wystarczyło zwykłe rzutowanie na string:

string(jakasZmiennaPChar);

Chodziło mi głównie o komentarz :

This function is provided for backwards compatibility only. To convert a null terminated string to a Pascal-type string, use a typecast or an assignment.

0

StrPas

Nie jestem super programistą najlepszym na świecie, ale wg mnie ta funkcja nie jest też za bardzo potrzebna. Ponieważ mi zawsze wystarczyło zwykłe rzutowanie na string:

string(jakasZmiennaPChar);

Rzutowanie na string zdaje egzamin, gdy string oznacza to, co AnsiString. Natomiast, gdy stirng to ShortString, rzutowanie nic nie da. Poza tym, przypisanie łańcucha PChar do zmiennej AnsiString nie wymaga (a przynajmniej u mnie nie wymaga :) ) rzutowania typów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1