在main中搜索字符串结尾时出现分段错误,但在函数C++中没有

1 c++ string segmentation-fault

我正在尝试实现一个简单的字符串长度函数.如果我在main中编写所有内容,则代码段错误.但是,如果我声明一个strlen函数,那么它就不会.为什么会这样?

为什么以下代码有效

using namespace std;
#include <iostream>

int strlen(char *s)
{
    char *p = s;
    while (*p != '\0')
        p++;
    return p - s;
}


int main()
{
    char *s;
    cin >> s;
    cout << strlen(s) << endl;
}
Run Code Online (Sandbox Code Playgroud)

虽然这段代码是段错误的吗?

using namespace std;
#include <iostream>

int main()
{
    char *s;
    cin >> s;
    char *p = s;
    while (*p != '\0')
        p++;
    cout << p-s << endl;
}
Run Code Online (Sandbox Code Playgroud)

dan*_*n78 5

你还没有分配任何内存s.它在一个案例而不是另一个案例中起作用的原因可能是因为C++中未定义行为的奇迹.