首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在luajit中使用strtok?

如何在luajit中使用strtok?
EN

Stack Overflow用户
提问于 2014-06-04 15:15:35
回答 1查看 331关注 0票数 1

我的代码如下:

代码语言:javascript
复制
local ffi = require "ffi"
local ffi_C = ffi.C
local ffi_typeof = ffi.typeof
local ffi_new = ffi.new
local ffi_string = ffi.string
local NULL = ngx.null
local tostring = tostring

ffi.cdef[[
    char * strtok(char * str, const char * delimiters);
]]

local p_char_type = ffi_typeof("char[?]")

function split(src, c)
    local result = {}

    local pch = ffi_new(p_char_type, 1)
    local psrc = ffi_new(p_char_type, #src)
    local pc = ffi_new(p_char_type, #c)

    ffi.copy(psrc, src)
    ffi.copy(pc, c)
    pch = ffi_C.strtok(psrc, pc)

    while pch do
        table.insert(result, ffi_string(pch))
        pch = ffi_C.strtok(NULL, pc)
        ngx.log(ngx.ERR, "pch ok")
    end

    ngx.log(ngx.ERR, "split ok")

    return result
end

当我运行我的nginx时,发生了一些错误!在while循环返回后,nginx工作进程崩溃并返回信号11。最后一个ngx.log无法运行。我该怎么处理呢?

EN

回答 1

Stack Overflow用户

发布于 2014-06-05 01:57:42

代码语言:javascript
复制
local psrc = ffi_new(p_char_type, #src)
ffi.copy(psrc, src)

当给定字符串源时,ffi.copy也会复制空终止符,但是您的数组太小,无法容纳它,从而导致溢出。

此外,不要使用strtok,而要考虑使用Lua模式。它们更安全,更容易使用,而且不依赖于FFI。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24031289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档