1

私が理解しているように、関数char *strstr(const char *s1, const char *s2);はヌル終了文字列 s1 でヌル終了文字列 s2 を検索します。

たとえば、null で終了する文字列 s2 を渡しますが、s1 として渡されるバッファーは null で終了しません。このような場合、文字列 s2 が s1 に存在しない場合はどうなりますか? 関数 strstr は、s1 の開始アドレスから '\0' が見つかるまで、s2 を検索し続けます。しかし、まったく見つからないとしましょう'\0'。保護された、または禁止されたメモリ領域にアクセスしてクラッシュしますか?

これが未定義の動作であることはわかっていますが、あなたの経験に基づいて、何が問題になる可能性がありますか?

4

1 に答える 1

8

私はこれが未定義の振る舞いであることを知っています

そして、これであなたの質問は終わりです。UBなので、どうなるかは誰にもわかりません。はい、アクセス違反とダンプコアが発生する可能性があります。誤ってメモリのどこかで0に遭遇し、そこで停止する可能性があります。部分文字列も見つかる可能性があります(小さな可能性)。または、悪魔が鼻から飛び出す可能性があります。

于 2012-12-19T05:56:01.373 に答える