Re: [fpc-pascal] Remove last character from pchar
Note: if your string is UTF8 encoded, the last "character" can be encoded, can span over 1 to 4 "Char", you need to know the length of your character. For example: program Project1; {$mode objfpc}{$H+} uses SysUtils, Classes; var s: array[0..30] of char; p: PChar; i: Integer; begin p:= @s; StrPLCopy( p, 'Test€a', 30); Writeln( p); for i:= 0 to 7 do Write( ord(s[i]),':',s[i],' '); Writeln; s[5]:= #0; Writeln( p); for i:= 0 to 7 do Write( ord(s[i]),':',s[i],' '); Writeln; end. gives $ ./project1 Test€a 84:T 101:e 115:s 116:t 226:� 130:� 172:� 97:a Test� 84:T 101:e 115:s 116:t 226:� 0: 172:� 97:a $ (the € character which spans over 3 chars is broken and so the end of the string becomes unreadable) ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Remove last character from pchar
I think you could just manage the end of your string with a #0 char. Just allocate enough space for the maximum size of your string plus the terminal #0 char. For example program Project1; {$mode objfpc}{$H+} uses SysUtils, Classes; var s: array[0..30] of char; p: PChar; begin p:= @s; StrPLCopy( p, 'Test', 30); Writeln( p); s[3]:= #0; Writeln( p); end. produces $ ./project1 Test Tes $ ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Remove last character from pchar
Also StrPCopy will take the contents of an existing PChar and put it in an AnsiString… And sometimes I have regular pascal strings I want to pass to something as a Pchar, so then I do: Pchar(AnsiString(mystring)); But lately I’ve been just making all strings AnsiStrings anyway. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Remove last character from pchar
Pchars are just a pain, I do not use any Pchars.. instead I use AnsiStrings that I can manipulate in a way that is easy and then I just do Pchar(myvariable) whenever I need to use a function that needs a Pchar… like this: Var MessageBoxText:Ansistring; .. .. windows.messagebox(0,pchar(MessageBoxtext)…..bla bla bla); There is probably a better way but for me conversion to Pchar is a small price to pay for easy string manipulation. AnsiStrings take care of their own memory allocation and the Pchar conversion doesn’t require an actual Pchar variable to bother with managing. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal