Tôi đang cố sử dụng ctypes để tạo một mảng char * trong python được chuyển tới thư viện để điền chuỗi. Tôi mong đợi 4 chuỗi không quá 7 ký tự.Python sử dụng ctypes để chuyển mảng char * và điền vào các kết quả
đang py tôi trông như thế
testlib.py này
from ctypes import *
primesmile = CDLL("/primesmile/lib.so")
getAllNodeNames = primesmile.getAllNodeNames
getAllNodeNames.argtypes = [POINTER(c_char_p)]
results = (c_char_p * 4)(addressof(create_string_buffer(7)))
err = getAllNodeNames(results)
lib.cpp
void getAllNodeNames(char **array){
DSL_idArray nodes; //this object returns const char * when iterated over
network.GetAllNodeIds(nodes);
for(int i = 0; i < (nodes.NumItems()); i++){
strcpy(array[i],nodes[i]);
}
}
tôi tiếp tục nhận lỗi segmentation khi tôi cố gắng chạy mã này . Tôi đã tạo ra một thử nghiệm từ C hoạt động hoàn hảo nhưng trong Python tôi phải thiết lập các mảng con trỏ không chính xác hoặc một cái gì đó. Dường như nó đến nút thứ hai trong vòng lặp và sau đó có một vấn đề như tôi đã nhìn thấy từ việc phun ra dữ liệu vào dòng lệnh. Bất kỳ cái nhìn sâu sắc sẽ được nhiều đánh giá cao.
Bạn cũng có thể tạo mảng 2D cho bộ đệm: 'string_buffers = ((ctypes.c_char * 8) * 4)()'. Nó sẽ lặp lại giống nhau khi bạn định nghĩa 'con trỏ' trên dòng tiếp theo. – eryksun