Nach perlapi, sv_catpv()
funktioniert wie folgt:Was ist der Unterschied zwischen sv_catpv() und sv_catpvs()?
verkettet die
NUL
terminierte Zeichenkette an das Ende der Zeichenkette, die in der SV ist. Wenn der SV den UTF-8-Status festgelegt hat, sollten die angehängten Byte gültige UTF-8 sein. Griffe erhalten Magie, aber keine Magie.
void sv_catpv(SV *const sv, const char* ptr)
Die meisten der XS Tutorials, die ich gefunden habe, Verwendung sv_catpvs()
, aber die tut dies:
Wie
sv_catpvn
, sondern nimmt eine Zeichenkette anstelle eines Strings/Länge Paar .
void sv_catpvs(SV* sv, const char* s)
Nun, das ist nicht sehr hilfreich, also lassen Sie sich bei sv_catpvn()
aussehen:
verkettet die Zeichenfolge an das Ende der Zeichenfolge, die in dem SV ist. Die
len
gibt die Anzahl der zu kopierenden Bytes an. Wenn der SV den UTF-8-Status festgelegt hat, sollten die angehängten Byte gültige UTF-8 sein. Griffe erhalten Magie, aber keine Magie.
void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)
So tut sv_catpvn
das Gleiche wie sv_catpv
, außer dass sie die Länge der Zeichenfolge als separate Parameter übernimmt, und sv_catpvs
ist die gleiche wie sv_catpvn
außer es die Zeichenkette nimmt.
Gibt es einen feinen Unterschied zwischen sv_catpv
und sv_catpvs
, die ich vermisse, oder sind es nur zwei Möglichkeiten, das Gleiche zu tun?
was bedeutet, dass sv_catpvs tatsächlich null Zeichen enthalten kann – ysth
Ja, obwohl das ein unbeabsichtigter Nebeneffekt ist. – ikegami