第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ctypes:將char的指針分解/轉換為char的指針數組

ctypes:將char的指針分解/轉換為char的指針數組

郎朗坤 2021-04-02 11:11:28
我正在使用C ++中的示例代碼來處理封閉源共享庫,如下所示:// Header#define MAX_PARAM_NAME             10int foo(..., char **ParNameList, ...);// Mainchar      *ParNameList = (char *)NULL;ret = foo(..., &ParNameList,...);par = (char (*)[MAX_PARAM_NAME])ParNameList;應該如何在ctypes中處理它?有問題的部分是在函數聲明中應該使用foo(..., char **ParNameList, ...);a char **,但char *實際上是在函數調用中給出了對它的引用。到目前為止,我有:from ctypes import *so = cdll.LoadLibrary(...)  so.foo.argtypes = [                                                                  ...POINTER(POINTER(c_char)), # ParNameList                       ...]                                                                                                        so.foo.restype = c_int                                                               #...ParNameList = POINTER(c_char)()so.foo(..., ParNameList ,...)這給了我一個垃圾字符串,我在其中看到所需的輸出與隨機變化的RAM位交錯。但是(char (*)[MAX_PARAM_NAME])強制轉換在ctypes中如何工作?如果整個事情有更直接的方法,我將不勝感激。
查看完整描述

2 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

您需要使用傳遞c_char指針的地址byref:


foo.argtypes = [..., POINTER(POINTER(c_char)), ...]

foo.restype = c_int


par_name_list = POINTER(c_char)()


# pass by reference

foo(byref(par_name_list))


par = cast(par_name_list, POINTER(c_char * MAX_PARAM_NAME))

之后,您可能需要釋放內存。


查看完整回答
反對 回復 2021-04-13
  • 2 回答
  • 0 關注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號