6

関数を使用してサーバーを記述しますchar* inet_ntoa(struct in_addr in),。ヘッダー <sys/socket.h>とをインクルードすると<netinet/in.h>、実行可能バイナリはコンパイラの警告と共に生成されますが、プログラムが からの戻り文字列を処理するときにセグメント違反が発生しinet_ntoaます。しかし、ヘッダーを追加すると、<arpa/inet.h>,すべて問題ないようです。

どうしたの?

4

1 に答える 1

12

arpa/inet.hの宣言が含まれていchar* inet_ntoa(struct in_addr in)ます。このヘッダーを含めない場合、コンパイラーは暗黙の宣言を使用しますint inet_ntoa()。間違った宣言は、特にシステムを使用している場合、セグメンテーション違反につながる可能性がありsizeof(int)!=sizeof(void*)ます。

使用している場合は、フラグgccを追加できます。明示的な宣言なしで関数を使用することについて警告します。-Wallgcc

于 2012-06-15T11:30:32.483 に答える