根据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_catpvsv_catpvssv_catpvn
sv_catpv和我之间是否有一些微妙的区别sv_catpvs,或者它们只是做同一件事的两种方法?