SWIG: строка не полностью копируется или отображается? - PullRequest
1 голос
/ 09 июля 2011

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

charPtr = myProj.strAll ( 8 );

где strAll:

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

Затем я передаю charPtr в функцию, подобную этой:

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

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

memcpy ( dataOut, dataIn, maxLen);

Использование:

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

Однако, когда я скажу python распечатать charPtr, он напечатает только ABC.

Ожидаемый:

>>charPtr
'ABCD1234'
>>print charPTr
ABCD1234

Фактический:

>>charPtr
'ABC'
>>print charPTr
ABC

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

1 Ответ

0 голосов
/ 09 июля 2011

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

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

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

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

...