使用 ctypes 从 Python 调用带有 Char** 参数的 C 方法

2024-03-07

我需要一种使用 ctypes 库将数组从 Python 传递到 char* 的方法到 C 库。

我尝试过的一些方法导致我出现分段错误,另一些则导致垃圾信息。


由于我已经在这个问题上苦苦挣扎了一段时间,我决定写一个小指南,以便其他人可以受益。

有这段C代码:

void passPointerArray(int size, char **stringArray) {
  for (int counter=0; counter < size; counter++) {
    printf("String number %d is : %s\n", counter, stringArray[counter]);
  }
}

我们想使用 ctypes 从 python 调用它(有关 ctypes 的更多信息可以在上一篇文章中找到),因此我们写下以下代码:

def pass_pointer_array():
  string_set = [
    "Hello",
    "Bye Bye",
    "How do you do"
  ]

  string_length = len(string_set)

  select_type = (c_char_p * string_length)
  select = select_type()

  for key, item in enumerate(string_set):
    select[key] = item

  library.passPointerArray.argtypes = [c_int, select_type]
  library.passPointerArray(string_length, select)

现在我读到它似乎非常简单,但我很高兴找到传递给 ctypes 的正确类型以避免分段错误......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ctypes 从 Python 调用带有 Char** 参数的 C 方法 的相关文章

随机推荐

  • Java线程生产者消费者算法无法正常工作

    我正在尝试学习线程 因此我编写了一个示例生产者消费者问题 其中生产者生成从 1 到 10 的数字 而消费者必须显示它们 但只有消费者显示数字 1 并停止 正如我所说 该程序写得不好 可能很荒谬 但我仍然想弄清楚为什么从 1 到 10 的所有
  • 有条件地调用 React hook

    从react官方文档我们知道 React 依赖于 Hook 的调用顺序 https reactjs org docs hooks rules html explanation 那么 如果我想有条件地调用它 那么为钩子 保留 一个位置有什么问
  • jQuery 对话框第二次未打开

    I found 这个线程 https stackoverflow com questions 366696 jquery dialog box这基本上和我有同样的问题 但他们的解决方案对我不起作用 我第一次单击提交按钮时会出现该对话框 但第
  • 如何让子菜单浮动在div上?

    大家好 我有一个带有下拉菜单的子菜单 但是当菜单下降时 它会将下面的 div 向下推 知道如何修复它以便它加载到 div 上吗 还有一个是水平的 一个是垂直的 如何解决这个问题 谢谢 JSFiddle http jsfiddle net p
  • 将 .obj 转换为 .h 时无法使用“已定义(@array)”警告

    我正在尝试将我的 obj 文件转换为 h 头文件 但我收到 Can t use define array 也许您应该忽略 Defined 警告 并且没有 h 文件已创建 我尝试过更换 center to center或省略defined 但
  • 如何摧毁Fancybox?

    我正试图摧毁Fancybox http fancyapps com fancybox 我还没有找到任何方法来做到这一点文档 http fancyapps com fancybox docs 初始化后如何销毁呢 这不起作用 a unbind
  • 即使PODS不受升级影响,“helm升级”是否会重新启动PODS?

    我的舵图有大约 12 个 PODS 当我这样做的时候helm upgrade更改某些值后 除一个 POD 外 所有 POD 都会重新启动 我的问题是 Will helm upgrade即使 PODS 不受升级影响 也要重新启动吗 换句话说
  • mLab 上的 MongoDB 身份验证失败

    按照此处的步骤创建了一个新的 mLab 帐户并创建了一个数据库http docs mlab com create sub http docs mlab com create sub 尝试使用 mongo shell 和 mongoose N
  • 在WPF中,当由于空引用而绑定失败时,是否使用FallbackValue?

    我的视图模型公开了一个名为的列表MyList可能为空或null 我有一个想要根据这种状态隐藏的元素 如果MyList为空或null 那么该元素应该折叠 如果它有元素 那么应该显示它 这是我的DataTrigger
  • 如何console.log Moment.js版本?

    有没有办法查出是什么版本Moment js正在被使用 Moment js http momentjs com 只需使用moment version 文档页面中似乎没有提到这个属性 但是查看库很容易得到它github上的代码 https gi
  • ASP.NET 中的BackgroundWorker 线程

    是否可以使用 BackGroundWorker 线程ASP NET http en wikipedia org wiki ASP NET2 0适合以下场景 让浏览器端的用户不用等待很长时间 Scenario 浏览器请求一个页面 例如 Sen
  • GitPython 列出受某个提交影响的所有文件

    我正在使用这个 for 循环来循环所有提交 repo Repo C Users shiro Desktop lucene solr for commit in list repo iter commits print commit file
  • Android:使用第三方应用程序打开私人文件

    我正在制作一个从互联网下载文件并允许用户使用第三方应用程序打开这些文件的应用程序 我使用以下命令将这些文件存储在我的私人应用程序目录中getFilesDir http developer android com reference andr
  • 使用Python3.x创建贝叶斯网络并学习参数[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在为 Windows 上的 python3 x 寻找最合适的工具来创建贝叶斯网络 从数据中学习其参
  • 在 Python 中解析 CSS

    我正在合并 100 个 HTML 页面 所有页面的头部都嵌入了样式元素 使用 BeautifulSoup 提取 style 的内容 但现在只剩下将字符串解析为字典 selector str properties str 的任务 查看tiny
  • 如何自动下载每周导出服务文件

    在 SalesForce 中 您可以在此处安排最多每周一次的数据 备份 转储 设置 gt 管理设置 gt 数据管理 gt 数据导出 如果您有一个大型 Salesforce 数据库 则可能需要手动下载大量文件 有没有人有最佳实践 工具 批处理
  • CorePlot iPhone 错误:CorePlot-CocoaTouch.h:没有这样的文件或目录

    我正在尝试引导某人将 CorePlot 添加到他们的 iPhone 应用程序中 我的电脑上可以运行 但他总是收到 CorePlot CocoaTouch h no such file or directory 错误 如果我弄乱了构建设置中的
  • 在 Swift 中从 sockaddr_in 结构体获取 IP 地址和端口号?

    经过多次尝试和错误 但没有取得任何成功 看来我可能需要一些帮助 在最新版本的 Swift 中 如何从 sockaddr in 获取 IP 地址和端口号 我看到了一些相关的问题 但似乎无法在任何地方找到合适的例子 另外 我似乎并没有真正掌握如
  • Chartjs 在鼠标悬停时非常快速地调整大小(闪烁)

    我在基于引导的页面中有一个图表 我试图在页面调整大小时调整它的大小 以遵循响应式设计的变化 所以我有这段代码 function redrawChart var w chart container width var c document g
  • 使用 ctypes 从 Python 调用带有 Char** 参数的 C 方法

    我需要一种使用 ctypes 库将数组从 Python 传递到 char 的方法到 C 库 我尝试过的一些方法导致我出现分段错误 另一些则导致垃圾信息 由于我已经在这个问题上苦苦挣扎了一段时间 我决定写一个小指南 以便其他人可以受益 有这段