Мне нужно отправить указатель на массив символов в одну из моих функций. Чтобы создать этот 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
Кто-нибудь знает, что происходит?
ABCD1234
имеет 8 символов. Но вы также должны предоставить дополнительный байт для символа завершения \0
. Каждая строка C должна заканчиваться символом \0
.
myProj.Populate ( "ABCD1234", charPtr, 8 );
charPtr
должен указывать на местоположение, которое может вместить 9 символов, из которых последним является размещение символа завершения.
И я не уверен, почему вы просто выделяете 5 мест, где вы пытаетесь скопировать строку длиной 8 символов.
charPtr = myProj.strAll ( 5 );