2

私はsnmpを使用していて、requests-> requestvb->val.string関数がu_char*を返し、それをchar[255]に格納しようとしています。

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

newValueの内容をmyArrayにコピーするためにいくつかのアプローチを試しましたが、すべてがセグメンテーション違反のようです。私は何が間違っているのですか?

私が試してみました memcpy(myArray, newValue);

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

私は何が間違っているのですか?

4

1 に答える 1

3

あなたnewValueはタイプcharであり、すべての意図と目的のために、あなたmyArrayはタイプchar*です。

まず、正しく使用していて、2つではなく3つのパラメーターを渡していると仮定します。memcpyここで、3番目のパラメーターはで使用しているものと同じですstrncpy

strncpyまたはを使用しようとすると、すべてをにコピーしようとするとmemcpy、1文字の「制限」を超えてしまいます。newValuemyArray

修正は非常に簡単なはずです。

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

それが済んだら、これでうまくいくはずです。もちろん、それはのサイズがmyArray実際には255以上であることを前提としています:)

myArray補足として(そしてこれは言うまでもありませんが)、印刷する予定がある場合は、最後にnullの終了文字があることを確認してください。コピー操作を実行した後に1つがない場合、それから印刷しようとすることは非常に一般的な間違いであり、セグメンテーション違反につながる可能性もあります。

于 2012-04-05T02:48:25.267 に答える