SWIG:字符串未完全复制或显示?

时间:2011-07-08 20:37:50

标签: python c string swig memcpy

我需要将一个指向字符数组的指针发送到我的一个函数。为了产生这个char *,我在我的一个c文件中使用这个函数,就像这样调用

charPtr = myProj.strAll ( 8 );

其中strAll是:

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

然后我将charPtr传递给这样的函数:

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

使用maxLen作为大小限制,将dataIn复制到dataOut中。它使用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 :(得分:0)

ABCD1234 8 个字符。但是您还应该为终止字符\0提供额外的字节。每个C字符串都应以\0终止。

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

charPtr应该指向一个可容纳 9 个字符的位置,其中最后一个是放置终止字符。

我不确定您为什么只是在 5 位置分配 8 字符长的字符串。

charPtr = myProj.strAll ( 5 );