首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将字符串列表从python/ctype传递到C函数,应为char **

将字符串列表从python/ctype传递到C函数,应为char **
EN

Stack Overflow用户
提问于 2010-08-16 23:24:07
回答 4查看 11.3K关注 0票数 24

我有一个C函数,它需要一个list \0结尾的字符串作为输入:

代码语言:javascript
复制
void external_C( int length , const char ** string_list) { 
   // Inspect the content of string_list - but not modify it.
} 

在python (带有ctype)中,我想根据python字符串的列表调用此函数:

代码语言:javascript
复制
def call_c( string_list ):
    lib.external_C( ?? )

call_c( ["String1" , "String2" , "The last string"])

关于如何在python端构建数据结构,有什么建议吗?注意,我保证C函数不会改变string_list中字符串的内容。

问候

joakim

EN

回答 4

Stack Overflow用户

发布于 2010-08-16 23:50:40

代码语言:javascript
复制
def call_c(L):
    arr = (ctypes.c_char_p * len(L))()
    arr[:] = L
    lib.external_C(len(L), arr)
票数 26
EN

Stack Overflow用户

发布于 2010-08-17 01:48:27

非常感谢你,这真是太棒了。我还做了另一种变种,像这样:

代码语言:javascript
复制
def call_c( L ):
    arr = (ctypes.c_char_p * (len(L) + 1))()
    arr[:-1] = L
    arr[ len(L) ] = None
    lib.external_C( arr )

然后在C-function中,我遍历(char **)列表,直到找到NULL。

票数 6
EN

Stack Overflow用户

发布于 2018-12-08 23:50:11

使用ctype

创建过期列表(字符串)

代码语言:javascript
复制
expiries = ["1M", "2M", "3M", "6M","9M", "1Y", "2Y", "3Y","4Y", "5Y", "6Y", "7Y","8Y", "9Y", "10Y", "11Y","12Y", "15Y", "20Y", "25Y", "30Y"]

发送字符串数组的逻辑

通过在数组中循环将字符串数组转换为字节数组

代码语言:javascript
复制
 expiries_bytes = []
    for i in range(len(expiries)):
        expiries_bytes.append(bytes(expiries[i], 'utf-8'))

用于初始化长度为数组的指针的逻辑ctype

代码语言:javascript
复制
expiries_array = (ctypes.c_char_p * (len(expiries_bytes)+1))()

将字节数组赋值给指针

代码语言:javascript
复制
expiries_array[:-1] = expiries_bytes
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3494598

复制
相关文章

相似问题

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