Строки
C / C ++ заканчиваются на NULL, что означает, что первый символ \0
обозначает конец строки.
Когда функция возвращает указатель на такую строку, вызывающая сторона (в данном случае SWIG) не может узнать, есть ли больше данных после первого \0
, поэтому вы получаете только первую часть.
Итак, первое, что нужно сделать, это изменить функцию C так, чтобы она возвращала не только строку, но и ее длину. Поскольку может быть только одно возвращаемое значение, мы будем использовать аргументы указателя.
void fun(char** s, int *sz)
{
*s = "abc\0de";
*sz = 6;
}
Документы SWIG предлагают использовать cstring.i
библиотеку для переноса таких функций. В частности, последний макрос делает именно то, что вам нужно.
%cstring_output_allocate_size(parm, szparm, release)
Прочитайте документы , чтобы узнать, как его использовать.