2012-04-05 239 views
2

我正在使用snmp和requests-> requestvb-> val.string函數返回一個u_char *,我試圖將其存儲到char [255]中。如何將u_char *轉換爲C中的char []

u_char newValue = *(requests->requestvb->val.string) 
char myArray[255]; 

我已經嘗試了幾種方法將newValue的內容複製到myArray中,但是一切似乎都是segfault。我究竟做錯了什麼?

我已經試過 memcpy(myArray, newValue);

的另一種嘗試strncopy(myArray, newValue, sizeof(myArray));

我在做什麼錯?

回答

3

您的newValue類型爲char,對於所有意圖和目的,您的myArray類型爲char*

首先,我假設您正確使用memcpy,並且您傳遞3個參數而不是2個,其中第3個參數與您在strncpy中使用的參數相同。

當您嘗試使用strncpymemcpy,你試圖一切複製到myArray時超越一個字符「限制」在newValue

的修復應該是很簡單的:

u_char* newValue = requests->requestvb->val.string; 

一旦你做到了這一點,這應該工作。當然,這是假設myArray的大小實際上大於或等於255 :)

作爲一個附註(這應該不言而喻),請確保您的myArray有一個空終止字符在最後如果你打算打印它。執行復制操作後沒有一個,然後嘗試打印是一個非常常見的錯誤,也可能導致seg故障。

+0

謝謝!這解決了我的問題! – user1314238 2012-04-05 03:01:12

+0

很高興我能幫到你 – 2012-04-05 03:04:26