質問
c文字列ライブラリのstrlen関数を使用しています。NULLを渡しました。 文字列を入力すると、不思議な結果が見つかりました。NULL文字列を渡す必要はないことはわかっていますが、説明が必要です。コードは次のようになります。 ジェネラコディセタグプレ
私のgccコンパイラでは、コメントで問題なく動作します。
ただし、その行のコメントを削除する場合
k=strlen(s);
セグメンテーション違反が発生します。 説明はありますか?
解決
これは、int変数に割り当てられていないアセンブラコードです ジェネラコディセタグプレ
値が使用されないため、コンパイラは_strlenを呼び出さない
他のヒント
戻り値を割り当てていない最初の「strlen」呼び出しは、コンパイラによって最適化されている可能性があります。
strlen
にnullポインタを渡すと、未定義の動作が発生します。何かが起こる可能性があります。セグメンテーション違反を含みます。また、セグメンテーション違反は含まれていません。
正確な理由を知りたい場合は、コンパイラが生成するアセンブラコードを調べる必要があります。しかし、これでは何も役に立ちません。
所属していません StackOverflow