cython

Форк
0
29 строк · 903.0 Байт
1
from cython.cimports.libc.stdlib import malloc
2
from cython.cimports.libc.string import strcpy, strlen
3

4
hello_world = cython.declare(cython.p_char, 'hello world')
5
n = cython.declare(cython.Py_ssize_t, strlen(hello_world))
6

7
@cython.cfunc
8
def c_call_returning_a_c_string() -> cython.p_char:
9
    c_string: cython.p_char = cython.cast(cython.p_char, malloc(
10
        (n + 1) * cython.sizeof(cython.char)))
11

12
    if not c_string:
13
        return cython.NULL  # malloc failed
14

15
    strcpy(c_string, hello_world)
16
    return c_string
17

18
@cython.cfunc
19
def get_a_c_string(c_string_ptr: cython.pp_char,
20
                   length: cython.pointer(cython.Py_ssize_t)) -> cython.int:
21
    c_string_ptr[0] = cython.cast(cython.p_char, malloc(
22
        (n + 1) * cython.sizeof(cython.char)))
23

24
    if not c_string_ptr[0]:
25
        return -1  # malloc failed
26

27
    strcpy(c_string_ptr[0], hello_world)
28
    length[0] = n
29
    return 0
30

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.