2012-04-05 68 views
2

snmpで作業していますが、要求 - > requestvb-> val.string関数が私にu_char *を返し、char [255]に格納しようとしています。C言語でu_char *をchar []に変換する方法

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

私はnewValueの内容をmyArrayにコピーするいくつかの方法を試しましたが、すべてがsegfaultと思われます。私は間違って何をしていますか?

私は別の試みstrncopy(myArray, newValue, sizeof(myArray));

私が間違って何をやっている memcpy(myArray, newValue);

を試してみましたか?

答えて

3

newValueのタイプはcharで、すべての目的と目的でmyArrayのタイプはchar*です。

まず第一に、私はあなたが正しくmemcpyを使用して、そしてあなたが3番目のパラメータは、あなたがstrncpyで使用したものと同じである3つのパラメータの代わりに、2、に渡していることをしていると仮定するつもりです。あなたがstrncpymemcpyを使用しようとするとmyArrayにすべてをコピーしようとしたとき

、あなたはnewValue内の1つの文字「限度」を超えていきます。

修正は非常に簡単でなければなりません:あなたはそれをやった後は

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

、これは動作するはずです。もちろん、myArrayのサイズが255以上であることを前提としています。

副次的な注意点として、myArrayにはnullの終了文字が含まれていることを確認してください印刷を計画している場合は終了してください。コピー操作を実行した後に1つも持っていないし、印刷しようとすることは非常に一般的な間違いであり、またsegフォルトにつながる可能性があります。

+0

ありがとうございます!これは私の問題を解決しました! – user1314238

+0

うれしい –

関連する問題