2011-07-08 52 views
1

我需要將一個指向字符數組的指針發送給我的一個函數。爲了產生這種字符*,我用這個功能使得這樣調用SWIG:字符串未被完全複製或顯示?

charPtr = myProj.strAll (8); 

的我的C文件中的一個,其中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 

有誰知道發生了什麼事?

回答

0

ABCD1234有個字符。但是你還應該爲終止字符\0提供一個額外的字節。每個C字符串應該由\0終止。

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

charPtr應指向可容納字符出其中最後是將終止字符的位置。

我呆在一起知道爲什麼你只是分配,你正試圖長期複製的字符的字符串位置。

charPtr = myProj.strAll (5); 
+0

嘿!感謝回覆。我失去了思路。我打算分配爲8.而我知道有9個字符,包括空字符,我只用它作爲示例函數。它實際上是一個適應那個空字符的函數。但是,問題是它只打印前3個字符。即使我給第一個str分配了20。 –