根据perlapi,sv_catpv()
工作原理如下:
NUL
将- 终止的字符串连接到 SV 中字符串的末尾。如果 SV 设置了 UTF-8 状态,则附加的字节应该是有效的 UTF-8。处理“get”魔法,但不处理“set”魔法。
void sv_catpv(SV *const sv, const char* ptr)
不过,我发现的大多数 XS 教程都使用sv_catpvs()
了 ,它是这样做的:
类似
sv_catpvn
,但采用文字字符串而不是字符串/长度对。
void sv_catpvs(SV* sv, const char* s)
好吧,这不是很有帮助,所以让我们看一下sv_catpvn()
:
将字符串连接到 SV 中字符串的末尾。指示要复制的
len
字节数。如果 SV 设置了 UTF-8 状态,则附加的字节应该是有效的 UTF-8。处理“get”魔法,但不处理“set”魔法。
void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)
因此,除了将字符串长度作为单独的参数外,它的作用与它sv_catpvn
相同,除了它采用文字字符串外。sv_catpv
sv_catpvs
sv_catpvn
sv_catpv
和我之间是否有一些微妙的区别sv_catpvs
,或者它们只是做同一件事的两种方法?