質問

c文字列ライブラリのstrlen関数を使用しています。NULLを渡しました。 文字列を入力すると、不思議な結果が見つかりました。NULL文字列を渡す必要はないことはわかっていますが、説明が必要です。コードは次のようになります。 ジェネラコディセタグプレ

私のgccコンパイラでは、コメントで問題なく動作します。 ただし、その行のコメントを削除する場合 k=strlen(s);

セグメンテーション違反が発生します。 説明はありますか?

役に立ちましたか?

解決

これは、int変数に割り当てられていないアセンブラコードです ジェネラコディセタグプレ

値が使用されないため、コンパイラは_strlenを呼び出さない

他のヒント

戻り値を割り当てていない最初の「strlen」呼び出しは、コンパイラによって最適化されている可能性があります。

strlenにnullポインタを渡すと、未定義の動作が発生します。何かが起こる可能性があります。セグメンテーション違反を含みます。また、セグメンテーション違反は含まれていません。

正確な理由を知りたい場合は、コンパイラが生成するアセンブラコードを調べる必要があります。しかし、これでは何も役に立ちません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top