Secondo perlapi, sv_catpv()
funziona nel modo seguente:Qual è la differenza tra sv_catpv() e sv_catpvs()?
concatena i
NUL
-terminated stringa alla fine della stringa, che è in SV. Se SV ha impostato lo stato UTF-8, i byte aggiunti dovrebbero essere UTF-8 validi. Le maniglie "ottengono" la magia, ma non la magia "fissa".
void sv_catpv(SV *const sv, const char* ptr)
La maggior parte dei tutorial XS che ho trovato l'uso sv_catpvs()
, però, che fa questo:
Come
sv_catpvn
, ma prende una stringa letterale invece di una coppia di stringa/lunghezza .
void sv_catpvs(SV* sv, const char* s)
Beh, questo non è molto utile, quindi diamo un'occhiata a sv_catpvn()
:
Concatena la stringa alla fine della stringa, che è in SV.
len
indica il numero di byte da copiare. Se SV ha impostato lo stato UTF-8, i byte aggiunti dovrebbero essere UTF-8 validi. Le maniglie "ottengono" la magia, ma non la magia "fissa".
void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)
Quindi, sv_catpvn
fa la stessa cosa di sv_catpv
la differenza che accetta la lunghezza della stringa come un parametro a parte, e sv_catpvs
è uguale a sv_catpvn
tranne che prende la stringa letterale.
C'è qualche sottile differenza tra sv_catpv
e sv_catpvs
che mi manca, o sono solo due modi per fare la stessa cosa?
che significa che sv_catpvs può effettivamente includere caratteri null – ysth
Sì, anche se questo è un effetto collaterale involontario. – ikegami