如何将const char *从python传递到C函数

马赫什(Mahesh Chaurasia)

ctypes在Python中使用打开文件进行C ++编写。

我的C ++代码:

extern "C" {
void openfile(const char *filename) {
    cout<<"File to open for writing = " <<filename<<endl;
    FILE *fp = fopen(filename,"w");
    fprintf(fp,"writing into file");
    fclose(fp);
}
}

我的Python代码:

>>> import ctypes
>>> lib = ctypes.cdll.LoadLibrary('/in/vrtime/mahesh/blue/rnd/software/test/test.so')
>>> outfile = "myfirstfile.txt"
>>> lib.openfile(outfile)
File to open for writing = m

我得到的文件名为m,这是char文件的第一个字符。

如何将整个字符串传递给C端?

罗比舍克

在python3中(并且您肯定会像在python2上一样使用python3,您的代码会很幸运地工作),字符串存储为wchar_t[]缓冲区,因此当您传递"myfirstfile.txt"C函数时,它会看到它的arg,"m\0y\0..."这显然是一个长度为C的C字符串。这是表现出来的问题:

In [19]: from ctypes import cdll, c_char_p

In [20]: libc = cdll.LoadLibrary("libc.so.6")

In [21]: puts = libc.puts

In [22]: puts('abc')
a

您应该将一个bytes对象传递给C函数

In [23]: puts(b'abc')
abc

您可以转换strbytes这样:

puts(my_var.encode())

为了避免进一步的混乱,您可以指定C函数的参数类型:

In [27]: puts.argtypes = [c_char_p]

现在该函数接受bytes(ctypes将其转换为char*):

In [28]: puts(b'abc')
abc

但不是str

In [30]: puts('abc')
---------------------------------------------------------------------------
ArgumentError                             Traceback (most recent call last)
<ipython-input-26-aaa5b59630e2> in <module>()
----> 1 puts('abc')

ArgumentError: argument 1: <class 'TypeError'>: wrong type

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将const char *存储到char *?

来自分类Dev

如何将const char *作为LPCSTR参数的参数传递?

来自分类Dev

如何从C#将const char *传递给C函数?

来自分类Dev

如何将char传递给函数?

来自分类Dev

ANSI C-将数据从函数传递到CHAR指针

来自分类Dev

如何将std :: vector <const char *>复制到void *中?

来自分类Dev

如何将 const char* 转换为 const unsigned char*

来自分类Dev

将const char *传递给C中的函数

来自分类Dev

将const char *传递给C中的函数

来自分类Dev

如何在函数之间传递const char *?

来自分类Dev

如何将 const char* 转换为 char[256]

来自分类Dev

C ++-如何将char附加到char *?

来自分类Dev

如何将Swift字符串数组传递给带有char **参数的C函数

来自分类Dev

如何将char数组作为字节从C JNI函数传递给Java方法[]

来自分类Dev

如何将char数组从C JNI函数作为字节传递给Java方法[]

来自分类Dev

C ++ 11中的cstr文字,如何将(char * [])传递给函数

来自分类Dev

将char数组传递给函数C ++

来自分类Dev

将char指针传递给C函数

来自分类Dev

将C ++ const char *转换为char *

来自分类Dev

C将const char *转换为char

来自分类Dev

将Const Char附加到Char * C ++

来自分类Dev

如何将System :: String转换为const char *?

来自分类Dev

如何将路径转换为FFI的const char *?

来自分类Dev

如何将std :: wstring转换为char const []

来自分类Dev

如何将内存分配给const char *数组

来自分类Dev

如何将std :: string用于Const Char参数

来自分类Dev

如何将char数组复制到C中的char指针?

来自分类Dev

如何将 int 复制到 u_char*

来自分类Dev

如何将char数组的值传递给C中另一个文件中的函数?

Related 相关文章

热门标签

归档