It is all over the RTL
Not just StrToInt. This goes much much deeper.
Just a quick search:
In inifiles.pp: Trim(Copy(sLine, 1, j - 1))
In fphttpclient.pp: LowerCase(Copy(S,1,Length(SetCookie)))=SetCookie
In fphttpclient.pp: ((LowerCase(Copy(HTTPHeaders[Result],1,l)))<>h)
In fpreport.pp: SameText(Copy(BaseName,1,9),'TFPReport')
The proper solution would be to have a new string type SubString or something, which could be used anywhere a string can be used. But it would only refer an existing string, and not require memory allocations.
You could build your own type with a record, but then the problem is that record fields are not kept in registers, so it is slower than a local variable pchar. This needs an improved optimizer