我需要将一个指向字符数组的指针发送到我的一个函数。为了产生这个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
有谁知道发生了什么事?
答案 0 :(得分:0)
ABCD1234
有 8 个字符。但是您还应该为终止字符\0
提供额外的字节。每个C字符串都应以\0
终止。
myProj.Populate ( "ABCD1234", charPtr, 8 );
charPtr
应该指向一个可容纳 9 个字符的位置,其中最后一个是放置终止字符。
我不确定您为什么只是在 5 位置分配 8 字符长的字符串。
charPtr = myProj.strAll ( 5 );