2012-04-05 3 views
2

Я работаю с snmp, а функция request-> requestvb-> val.string возвращает мне u_char *, и я пытаюсь сохранить это в char [255].Как преобразовать u_char * в char [] в C

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

Я попробовал несколько подходов, чтобы скопировать содержимое NEWVALUE в туАггау, но кажется, что все сегментации. Что я делаю не так?

Я попытался memcpy(myArray, newValue);

Еще одна попытка strncopy(myArray, newValue, sizeof(myArray));

Что я делаю неправильно?

ответ

3

newValue , Тип char*.

Прежде всего, я предполагаю, что вы правильно используете memcpy и что вы передаете 3 параметра вместо 2, где третий параметр совпадает с тем, который вы используете в strncpy.

При попытке использования strncpy или memcpy, вы собираетесь за один символ «предел» в newValue при попытке скопировать все, чтобы myArray.

Исправление должно быть довольно просто:

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

После того, как вы сделали это, это должно работать. Разумеется, предполагается, что размер myArray на самом деле больше или равен 255 :)

В качестве примечания к сведению (и это должно быть понятно), убедитесь, что ваш номер имеет нулевой завершающий символ в конец, если вы когда-либо планируете его распечатать. Не имея одного после выполнения операций копирования, а затем попытка печати является очень распространенной ошибкой и может также привести к ошибкам seg.

+0

Спасибо! Это решило мою проблему! – user1314238

+0

Рад, что я могу помочь –