问题大概是这样的,我从一个文件里读取字符串
将这个字符串传入到lua ffi c函数里面什么都不做直接返回
然后这个字符串出现了部分丢失
我调试过程中发现其实c函数里收到的字符串就已经丢失了
建了个repo:
https://github.com/FightingMan/luajit-str
源码如下:
test.lua
local ffi = require("ffi")
local test = ffi.load("/home/vagrant/libtest.so")
ffi.cdef[[
const char * direct_return(const char * str);
]]
local f = io.open("newecrypt0523.txt", "rb")
local foo = f:read("*all")
local bar = test.direct_return(foo)
print(foo)
print("======================")
print(ffi.string(bar))
test.c
const char * direct_return(const char * str) {
return str;
}
PANDORA$ Š˜ÀЫ®ÍkWK©•/± ÓE(É‹ªê‹¶ã²ƒãœÈ “
®6rûŠY½³Ö¢†yg?ÛŧêR"먌žƒíåuÆÖc€^"R!ÏŒˆæ6_}»Q ;?¬@„T^QX3\(ƒnë'zDåsèöŸÇÓÏ?ýÕ¹¦¥é$!óÞ×O®öï¶±ÎGå*~¸_DOñ®½pßÛ—n÷y¸,JÓ̓u¬&p†é˜TxVá^C&Hœ“†+?Ò‡0üÊšIq£ÙHV’Åv†5KËš8E¦œAÏ(8šÃBñBzÄ6LxBþ;)cÎ{BÁI?äa'ŠñxŒqôzpÚíz: 3.0 -platform=Android&sdkversion=2.5.0&product=loc P„¼Ò°Ú¹›~âD7ÄiÝ´éøa?ˆu'œˆk¢»I¸{ëc¶Ýû*cìGÑd§tÃ()÷ôŸvîó“&ô«Âê&/ϱº¯Š0‡¨†:¯Öv?Õ¿?»)?½/›¥3ÞKÅF•PÉQVTö&¢?¬ÐÇ6Bé:Ùå8êI?¬±¹Œ]uþÂ¥†ÓG½c?Ç•#O?F“ùqÆ@rBKw ±4cpz>†4w8^ÚSz‡kÛa?Rtï×|€”}O?ư7ÙKIÑ?Êî?ekô-¨ü‡Œ/¹|z…Ú=¿nˆs]Áø7#ÿ‰?¬žGÑt,ªøõžŒ±&˜Ò?dáŽðÛÎé±òÆÅ½È`€¼{N•µv<é¢z?y¬ìr?ÉÕ#;¥²NÓÜ2འ•Oy?Œ¢18QÙ³>Týð#}RÉ%M