Nieograniczony String?

0

Mam pytanie przypuszczam ze dla wiekszosci banalne i bardzo glupie ale czemu Delphi 7 traktuje mi każdy String jako shortstring i nie przyjmuje wiecej niz 255 znakow przy wpisywaniu np.

 
type
sms= record

          statuswyslania:boolean;
             datawysylki:string[20];
             godzinawysylki:string[20] ;
             minutywysylki:string[20];
             odbiorca:string[20];
             nadawca:string[20];
             tresc:string[1000];
              end;

Kompilator przyjmuje dopiero gdzy wartosc
tresc:string[1000];
zmienia do tresc:string[255];
Skoro łąńcuch string jest podobno nieograniczony??PS oczywiscie nie mam nigdzie wpisanej kontroliki{H-}

0

Używaj lepiej tablicy Char i wskaźnika do tego: PChar.

0

po prostu zadeklaruj zmienna w ten sposob:

tresc:string;

Moze pojawic sie tez podobny problem przy podstawianiu dlugiego ciagu, wtedy wystarczy rozdzielic go na kilka mniejszych, np:

tresc:='aaaa....bbbb....' //przy odpowiednio dlugim ciagu moze pojawic sie blad

tresc:='aaaa....'+'bbbb....' //tu blad nie wystapi
0

Tylko, że w ramach rekordu zapewne chcesz tego stringa zapisywać na przykład do pliku. Nie ma możliwości stworzenia stringu o rozmiarze zdefiniowanym, większym od 255.

Do tego musisz wykorzystać już tablicę elementów typu Char.

Help Delphi, Long Strings napisał(a)

You can also change declarations of short string types to string[255] or ShortString, which are unambiguous and independent of the $H setting.

Użycie nawiasu do określenia długości, wymusza ShortString, a ten nie może być dłuższy niż 255.

0

a przelacznik {+H}/{-H} ?
poza tym jest jeszcze AnsiString....;)

0

byteman -> Przeczytaj powyższe posty. O przełączniku wszyscy wiedzą, o AnsiString również. Nie jesteś w stanie zdefiniować AnsiString o konkretnym, ograniczonym rozmiarze. Albo przyjmujesz rozmiar do 255 w postaci ograniczonego ShortString'a, albo rozmiar nieograniczony (powiedzmy) w postaci AnsiString'a.

Jeśli jednak chcesz posługiwać się ciągiem znaków ograniczonym, a większym od 255, łatwo użyć tablicy elementów Char.

0

probowalem z tablica char ale otrzymalem blad Incompatible type ' array' and 'PAnsiChar' przy procie przypisanie do tresci

 
listaoczekujacych[liczbaoczekujacych+1].tresc:=pchar(tekst);

Wiec zrezygnowalem z tego roziwazania i postanowilem ptrzed wpisaniem do recordu podzielic łąńcuch na 4 mniejsze i po podziale zapisania ich do rekodu a nastepnie do pliku.

Pozdrawiam i dziekuje za pomoc

0

Przykładowe operacje:

var c:array[0..4] of char;
    s:string;
begin
s:='Test';

//Przypisanie do tablicy
StrCopy(@c, PChar(s));

//Przypisanie do stringu
s:=c;
end;

Pamiętaj, że tablica musi mieć o jeden znak więcej (zero-terminated string).

0

Nawet zadziałało!!8-O Dzieki wielkie!! To juz zupelnie rozwiazuje mój problem. Jeszcze raz dzieki wszystkim za pomoc!!

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