bad argument #1 to 'string' (cannot convert 'number' to 'const char *')

.KOHTOP.

Активный
Автор темы
226
35
Версия MoonLoader
.027.0-preview
Lua:
        if text:find('Должность: %{......%}.-((%d+))') then
            rang = text:match('Должность: %{......%}.-((%d+))')
        end

        imgui.Text(ffi.string(rang))

Код:
[19:53:24.668680] (error)    MyScript 1.1v.lua: D:\Arizona\bin\arizona\moonloader\MyScript 1.1v.lua:263: bad argument #1 to 'string' (cannot convert 'number' to 'const char *')
stack traceback:
    [C]: in function 'string'
    D:\Arizona\bin\arizona\moonloader\MyScript 1.1v.lua:263: in function '_draw'
    D:\Arizona\bin\arizona\moonloader\lib\mimgui\init.lua:107: in function <D:\Arizona\bin\arizona\moonloader\lib\mimgui\init.lua:91>
 
  • Эм
Реакции: Corenale и MLycoris
Решение
Lua:
imgui.Text(ffi.string(rang))
Из документации:
str = ffi.string(ptr [,len])
Creates an interned Lua string from the data pointed to by ptr.
Иными словами, если ты создал C-строку:
C++:
const char str[] = "string in C-style format";
В С-подобных языках переменная (в нашем случае str) — это указатель на строку).
То теперь, имея этот указатель, на Lua ты можешь получить обычную Lua-строку, с которой сможешь работать как с обычной Lua-строкой:
Lua:
local s = ffi.string(str)

-- будет обычная луа-строка, типа такой:
s = 'string in C-style format'
Возвращаясь к твоей задаче, функция imgui.Text принимает Lua-строку, поэтому тебе просто надо сделать:
Lua:
imgui.Text(tostring(rang))

Vintik

Через тернии к звёздам
Проверенный
1,565
1,037
Lua:
imgui.Text(ffi.string(rang))
Из документации:
str = ffi.string(ptr [,len])
Creates an interned Lua string from the data pointed to by ptr.
Иными словами, если ты создал C-строку:
C++:
const char str[] = "string in C-style format";
В С-подобных языках переменная (в нашем случае str) — это указатель на строку).
То теперь, имея этот указатель, на Lua ты можешь получить обычную Lua-строку, с которой сможешь работать как с обычной Lua-строкой:
Lua:
local s = ffi.string(str)

-- будет обычная луа-строка, типа такой:
s = 'string in C-style format'
Возвращаясь к твоей задаче, функция imgui.Text принимает Lua-строку, поэтому тебе просто надо сделать:
Lua:
imgui.Text(tostring(rang))
 
  • Нравится
Реакции: .KOHTOP., XRLM и Andrinall