0

引数を指定してプログラムを実行しようとすると、セグメンテーション違反エラーが発生します。これを GDB で実行したところ、問題の行が見つかりました。次のようになります。

*dstip = (*optarg);

プロトタイプは次のとおりです。

char *dstip;

そして最後に、この行で呼び出されています:

char *filter = ("ip dest host %s", dstip);

今振り返ってみると、見た目がうまくいかないことに驚きはありません...率直に言って、問題はこれらの行を削除する(およびフィルターテキストを変更する)ことで完全に解決されます。ただし、エラーメッセージフィルターに表示されるように入力されているIPv4アドレスが必要であり、ポインターでは役に立たず、さまざまなことを試してみましたが、うまくいきません。つまり、私は得るだけwarning initialization makes pointer from integerです...どうすればいいですか?

4

1 に答える 1

5

ステートメント

*dstip = (*optarg);

dstipを指すように設定されていませんoptarg。代わりに、何dstipを指すかの最初の文字を、指す最初の文字と同じ値に設定optargします。すなわちそれはと同じです

dstip[0] = optarg[0];

初期化されていないポインターと同様dstipに、メモリ内の未割り当て領域を変更すると、奇妙なことが起こります。

また、表現は

("ip dest host %s", dstip)

少なくとも、フォーマットされた文字列を返すと思われる場合は、あなたが思っていることをしません。実際には、コンマの両側の式を評価するコンマ演算子を使用していますが、コンマの右側の式の結果のみを返します。

于 2012-08-19T16:55:04.747 に答える