[fpc-pascal] Pchar from constant string
What is really happening in this snippet? I think it must be implicitly taking the address of the constant string but is it also adding the null terminator automatically? The string prints with writeln so it must be null terminated right? var p: Pchar; begin p := '123'; writeln(p); Regards, Ryan Joseph ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Pchar from constant string
On Thu, 29 Jun 2023 21:18:44 +0700 Hairy Pixels via fpc-pascal wrote: > What is really happening in this snippet? I think it must be > implicitly taking the address of the constant string but is it also > adding the null terminator automatically? The string prints with > writeln so it must be null terminated right? > > var > p: Pchar; > begin > p := '123'; > writeln(p); AFAIK the trailing #0 is already stored in the binary. Mattias ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Pchar from constant string
On Thu, 29 Jun 2023, Mattias Gaertner via fpc-pascal wrote: On Thu, 29 Jun 2023 21:18:44 +0700 Hairy Pixels via fpc-pascal wrote: What is really happening in this snippet? I think it must be implicitly taking the address of the constant string but is it also adding the null terminator automatically? The string prints with writeln so it must be null terminated right? var p: Pchar; begin p := '123'; writeln(p); AFAIK the trailing #0 is already stored in the binary. Yes, it is: --- _$PROGRAM$_Ld1: # [4] p := '123'; .ascii "123\000" .Le11: --- Just as it is for a shortstring and ansistring: --- # [6] s:='456'; .ascii "\003456\000" .Le12: .size _$PROGRAM$_Ld2, .Le12 - _$PROGRAM$_Ld2 --- Michael. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Pchar from constant string
On 2023-06-29 16:22, Mattias Gaertner via fpc-pascal wrote: On Thu, 29 Jun 2023 21:18:44 +0700 Hairy Pixels via fpc-pascal wrote: What is really happening in this snippet? I think it must be implicitly taking the address of the constant string but is it also adding the null terminator automatically? The string prints with writeln so it must be null terminated right? var p: Pchar; begin p := '123'; writeln(p); AFAIK the trailing #0 is already stored in the binary. Indeed - all constant strings are already terminated with #0. Note that this is not guaranteed for all string variables per se. Tomas ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Pchar from constant string
> On Jun 29, 2023, at 9:31 PM, Michael Van Canneyt via fpc-pascal > wrote: > > Yes, it is: > > --- > _$PROGRAM$_Ld1: > # [4] p := '123'; >.ascii "123\000" > .Le11: > --- > > Just as it is for a shortstring and ansistring: > --- > # [6] s:='456'; >.ascii "\003456\000" > .Le12: >.size _$PROGRAM$_Ld2, .Le12 - _$PROGRAM$_Ld2 That's why that worked. Hmm with short strings the null terminator could be truncated when copying right? Something to look out for. Regards, Ryan Joseph ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal