#cpp #строки #cython
Здравствуйте, я недавно начал использовать cython в своих проектах, и столкнулся с проблемой приведения типов. Есть функция, которая принимает на вход std::string и возвращает std::string, но если в python коде изменить эту строку, то получается сегфолт, непонимаю как с этим справится, объясните пожалуйста, что я делаю не так? Код Cython: cdef public string uploadfile(string fileid, string username): return("test_str" + str(username)) Код C++: #include #include #include #include #include using namespace std; int main(int argc, char **argv) { void *handle; string (*func_0)(string); char *error; string parameter; string parameter_1; handle = dlopen("/home/ks/storage/modules/webui/webui.so", RTLD_LAZY); if (!handle) { fprintf(stderr, "%s\n", dlerror()); exit(EXIT_FAILURE); } dlerror(); string (*func_1)(string, string); *(void **) (&func_1) = dlsym(handle, "uploadfile"); if ((error = dlerror()) != NULL) { fprintf(stderr, "%s\n", error); exit(EXIT_FAILURE); } cout << "Enter parameter \" fileid\": "; cin >> parameter; cout << "Enter parameter \" username\": "; cin >> parameter_1; (*func_1)(parameter, parameter_1); cout << "called func_1" << endl; cout << (*func_1)(parameter, parameter_1) << endl; dlclose(handle); exit(EXIT_SUCCESS); } Опять же, если создать переменную типа string, то её никак не могу инициализировать. Этот код работает: cdef public string uploadfile(string fileid, string username): cdef string s return s если сделать вот так, то сегфолится: cdef public string uploadfile(string fileid, string username): cdef string s = "text" return s Проблема решена, если кто-то подскажет решение лучше - буду рад: cdef public string uploadfile(string fileid, string username): cdef char *c_str_0 = "Simple string from python \nfile = " cdef string simple_string = c_str_0 simple_string += fileid return simple_string
Ответы
Ответ 1
cdef public string uploadfile(string fileid, string username): cdef char *c_str_0 ="Simple string from python \nfile = " cdef string simple_string = c_str_0 simple_string += fileid return simple_string
Комментариев нет:
Отправить комментарий