SWIG: строка не полностью копируется или отображается?

1

Мне нужно отправить указатель на массив символов в одну из моих функций. Чтобы создать этот char *, я использую эту функцию в одном из моих c файлов, который называется так

charPtr = myProj.strAll ( 8 );

где strAll:

char * strAll ( int size ) {
    return malloc( sizeof( char ) * size );
}

Затем я передаю charPtr в такую функцию:

myProj.Populate ( char* dataIn, char* dataOut, maxLen );

Заполнять копии данныхIn в dataOut, используя maxLen как ограничение размера. Он использует memcpy для его копирования через что-то вроде этого:

memcpy ( dataOut, dataIn, maxLen);

Применение:

myProj.Populate ( "ABCD1234", charPtr, 8 ); //maxLen is the # of bytes I've allocated for charPtr.

Однако, когда я говорю python для печати charPtr out, он будет печатать только ABC.

Ожидаемое:

>>charPtr
'ABCD1234'
>>print charPTr
ABCD1234

Актуально:

>>charPtr
'ABC'
>>print charPTr
ABC

Кто-нибудь знает, что происходит?

Теги:
string
swig
memcpy

1 ответ

0
Лучший ответ

ABCD1234 имеет 8 символов. Но вы также должны предоставить дополнительный байт для символа завершения \0. Каждая строка C должна заканчиваться символом \0.

myProj.Populate ( "ABCD1234", charPtr, 8 );

charPtr должен указывать на местоположение, которое может вместить 9 символов, из которых последним является размещение символа завершения.

И я не уверен, почему вы просто выделяете 5 мест, где вы пытаетесь скопировать строку длиной 8 символов.

charPtr = myProj.strAll ( 5 );
  • 0
    Привет! Спасибо за ответ. Я потерял ход мыслей. Я хотел выделить 8. И хотя я знаю, что есть 9 символов, включая этот нулевой символ, я использовал это только в качестве примера функции. Это на самом деле функция, которая подходит для этого нулевого символа. Однако проблема в том, что он печатает только первые 3 символа. Даже если я выделю что-то вроде 20 на первую ул.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню