0
コードでC
関数を使用する方法を理解しようとしています。はるかに簡単な解決策は、を使用するように見えます。しかし、私はPythonにインポートするライブラリを作成した後何らかの理由で私は奇妙な動作を参照してください。詳細は以下の通りです。ここでPython、C、ctypesと変な文字
は、私がC
コードのために持っているものです。
/* mymodule.c */
#include <stdio.h>
#include "mymodule.h"
void displayargs(int i, char c, char* s) {
(void)printf("i = %d, c = %c, s = %s\n", i, c, s);
}
/* mymodule.h */
void displayargs(int i, char c, char* s)
私は、以下のコマンドを使用して、それからライブラリを構築:
私のPythonのテストコードは、この
#!/usr/bin/python
# mymoduletest.py
import ctypes
mylib = ctypes.CDLL('./libmymodule.so')
mylib.displayargs(10, 'c', "hello world!")
のように見えます
gcc -Wall -fPIC -c mymodule.c
gcc -shared -Wl,-soname,libmymodule.so.1 -o libmymodule.so mymodule.o
./mymoduletest.pyを実行すると、
01が表示されます。i = 10, c = c, s = hello world!
は、しかし、私は�
文字がc
の実際のchar
値の代わりに表示されるのはなぜ
i = 10, c = �, s = hello world!
を参照してください?
何か助けていただければ幸いです。
Pythonに 'char'型がありますか?それとも単に 'c'の長さ1の文字列を渡すだけですか? – melpomene
'mylib.displayargs(10,99、" hello world! ")'と呼ぶとどうなりますか? – melpomene