1

据我了解,该函数char *strstr(const char *s1, const char *s2);在以空字符结尾的字符串 s1 中搜索以空字符结尾的字符串 s2。

假设我传递了一个以空结尾的字符串 s2,但是作为 s1 传递的缓冲区不是以空结尾的,如果字符串 s2 不存在于 s1 中会发生什么情况?函数 strstr 将从 s1 的起始地址开始继续搜索 s2,直到找到一些 '\0'。但是,假设它根本找不到'\0'?它会访问一些受保护或禁止的内存区域并崩溃吗?

我知道这是一种未定义的行为,但根据您的经验,可能是什么问题?

4

1 回答 1

8

我知道这是一个未定义的行为

你的问题到此结束。因为它是UB,所以没有人可以肯定地告诉你发生什么。是的,它可能会导致访问冲突和转储核心。它可能会不小心在内存中的某个地方遇到一个 0 并停在那里。它也可能找到子字符串(机会很小)。或者它可能会导致恶魔从你的鼻子里飞出来。

于 2012-12-19T05:56:01.373 回答