ArgumentError:使用StringValueCStr时,string包含空字节

时间:2016-01-21 05:26:49

标签: c ruby ruby-c-extension

这是我的test file

这是我的完整代码(github.com/roroco/ro_article/tree/string-contains-null-byte)

我得到" ArgumentError:字符串包含空字节"在以下代码运行时:

在红宝石方面:

get_article(File.read("test_file"))

在c方面:

VALUE get_article(VALUE self, VALUE html) {
    str html2 = StringValueCStr(html);

test file是如此之大,如何在此文件中找到空字节?以及如何使StringValueCStr适用于所有字符串,即使它包含" null byte"

1 个答案:

答案 0 :(得分:1)

当我使用以下代码时:

body = File.read("test_file")
result = body.inspect

我的“结果”包含“\ u0000”(我的编码是utf8),所以解决方案是

body.gsub(%r{\u0000}, "")

在ruby side或c side执行