int strlen 中存储了零 C++

int strlen has zero stored in it c++

我尝试用 strlen for char 来获取 cstring 中的多少个字符以加入一个循环,该循环在代码中查找字符,但 strlen 只返回 0 电子邮件[] 我将其设为空以获取其中的任何值

using namespace std;
#include <iostream>
#include <cstring>
int main(int argc, char **argv)


{
char email[] = "";

cout << "Enter the email in question"<< endl;
cin >> email;

int size = strlen(email);

for (int i = 0; i < size; i++)
{
    cout << email;
    if (email[i] == '@' )
    {
        cout << "valid email";
}
    
}
char email[] = "";

这是一个空字符串。字符串长度为0,数组大小为1,唯一元素为空终止符

but strlen just returned 0

鉴于唯一可以放入数组的字符串是长度为 0 的字符串,这不足为奇。

cin >> email;

在 C++ 20 之前,这个语句曾经是高度不安全的。如果您要提供比数组大小更长的输入,则会溢出数组。由于数组的大小为 1,唯一适合的字符串是空字符串,因此任何非空输入都会溢出。

溢出数组将导致未定义的行为。因此,无法保证您观察到的行为。这是不好的;不要这样做。

自 C++20 起,运算符将安全地只读取适合数组的所有字符,并考虑空终止符 - 在本例中为 0 个字符。这是安全的,但可能不是您想要的。

一个好的解决方案是使用 std::string:

std::string email;
std::cin >> email;
int size = email.size();