【发布时间】:2022-01-25 11:07:18
【问题描述】:
我使用 Ruby API 在 C 中创建了 ruby 方法,它接收 3 个字符串参数:
VALUE cache_class = rb_define_class_under(class, CACHE_CLASS_NAME, rb_cObject);
rb_define_method(cache_class, "cache_test_result", cache_test_result, 3);
在test.rb中我调用了方法:
Cache.new.cache_test_result("str1", "str2", "str3")
而 C cache_test_result 函数工作起来很奇怪:
VALUE cache_test_result(VALUE str1, VALUE str2, VALUE str3) {
int rstr1_len = RSTRING_LEN(str1) + 1;
char buf_str1[rstr1_len];
strlcpy(buf_str1, RSTRING_PTR(str1), rstr1_len);
int rstr2_len = RSTRING_LEN(str2) + 1;
char buf_str2[rstr2_len];
strlcpy(buf_str2, RSTRING_PTR(str2), rstr2_len);
int rstr3_len = RSTRING_LEN(str3) + 1;
char buf_str3[rstr3_len];
strlcpy(buf_str3, RSTRING_PTR(str3), rstr3_len);
printf("buf_str1: %s\n", buf_str1);
printf("buf_str2: %s\n", buf_str2);
printf("buf_str3: %s\n", buf_str3);
}
此函数的输出:
buf_str1:
buf_str2: str1
buf_str3: str2
为什么 args 有偏移量...?
【问题讨论】: