gpt4 book ai didi

python - 将 Python str 传递给 C 函数

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:47 29 4
gpt4 key购买 nike

我有libx.so,它导出了一个函数和一个全局的char *

char *c_ptr = 0;

void foo(char *s)
{
c_ptr = s;
}

在 python 中,我通过两种方式将 str 传递给 foo

>>>libx = ctypes.CDLL("./libx.so")
#pass a raw str
>>>libx.foo("string")

#pass a c_char_p object
>>>libx.foo(c_char_p("strng"))

1.我认为,libx.foo("string") 将 Python str 对象传递给 C 函数,该函数稍后会将字符串分配给 char *c_ptr。我想知道,在调用foo之后,c_ptr会指向str对象"string"吗?因为我假设 str 对象 "string" 将在调用 foo 后被垃圾回收,对吗?

2.两种方式(传递"string"c_char_p("string"))效果有区别吗?它们在效果上有什么不同吗?

最佳答案

对于发现此问题的任何人,在 Python 3 中,字符串和字节现在不同了。 ctypes 需要一个 bytes 实例才能正确地将参数作为 char* 传递。

test_lib.get_val(b'Test1', byref(a)) 将完整的 'Test1' 作为 char* 传递给 c 函数

test_lib.get_val('Test1', byref(a)) 不会将 'Test1' 作为 char* 传递,根据我的一些测试,它传递了 python str 后跟一个空字符。

关于python - 将 Python str 传递给 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449764/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com