【发布时间】:2022-01-23 04:32:51
【问题描述】:
我尝试 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[] = "";定义了一个大小正好存储空终止符的数组。您无法在此字符串中读取任何有用的内容。 -
为什么不使用
std::string? -
您将
char email []视为std::string。如果您确实将其更改为std::string,那么所有其他代码都可以工作(strlen除外——您将使用size())。 -
您的程序有未定义的行为,通常无法预测具体会发生什么以及为什么会发生。
-
假设必须在没有
std::string的情况下完成分配,char email[20]将允许您将 19 个字符读入此字符串(永远不要忘记空终止符!),但cin >> email;不知道如何大数组是(请参阅array decay),并且会很高兴地读取数组的末尾并将您放在类似的船上。你想使用一些允许你指定数组长度的东西,比如cin.getline(email, sizeof(email));