在C/C++中,你可能会有一个函数,它的参数是一个指向字符的指针(char*),并且这个函数的目的是输出一些东西到这个字符数组中。C样例代码如下:
// example.c
#include <stdio.h>void output_char_pointer(char* output)
{snprintf(output, 100, "Hello from C!");
}int main()
{char * out = (char)malloc(100);output_char_pointer(out);printf("%s\n", out);
}
在Python中,需要使用ctypes模块来调用这个C函数
正确方法:
from ctypes import *# 加载库
lib = cdll.LoadLibrary('./example.so')# 设置输出参数的类型
lib.output_char_pointer.argtypes = [c_char_p]################################################################
# char*参数的正确定义方法
################################################################
# 创建一个字符数组
output_array = (c_char * 100)()
################################################################# 调用函数
lib.output_char_pointer(output_array)# 打印结果
print(output_array.value.decode('utf-8'))
错误方法(ps:网上许多用create_string_buffer的博客,但该方法报错):
from ctypes import *# 加载库
lib = cdll.LoadLibrary('./example.so')# 设置输出参数的类型
lib.output_char_pointer.argtypes = [c_char_p]################################################################
# char*参数的错误定义方法
################################################################
# 创建一个字符串缓冲区
output_buffer = create_string_buffer(100)
################################################################# 调用函数
lib.output_char_pointer(output_buffer)# 打印结果
print(output_buffer.value.decode('utf-8'))