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();
我尝试用 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();