字符串只是一个字符数组(末尾有一个'\0'或空字符)。 但是当我在C++中使用getline函数时,如果我使用char,它会给我一个错误,而对于string则没有错误。 以下作品:
#include<iostream>
int main()
{
std::string name;
std::cout<<"Name: ";
getline(std::cin,name);
std::cout<<"Name: "<<name;
return 0;
}
但是当我使用char而不是string时。。。就不起作用了
#include<iostream>
int main()
{
char name[50];
std::cout<<"Name: ";
getline(std::cin,name);
std::cout<<"Name: "<<name;
return 0;
}
“
您正在混合C字符串和C++字符串。
“字符串只是一个字符数组(末尾有一个'\0'或空字符)。” C字符串就是这样。 代码中的std::string
是一个C++字符串。 它们是根本不同的。 C++字符串不是数组字符。 它是std::string
类的对象。 可以将C字符串复制到C++字符串中,也可以用C字符串初始化C++字符串。 您可以使用std::string::c_str()
将C++字符串转换为常量C字符串。
Std::GetLine
需要Std::String
作为第二个参数。 不能与C字符串一起使用。
您可能会想到类似C中的CS50.h,其中string
是char*
的typedef。 C++中不是这样,std::string
实际上是一种完全不同的类型。
有一种形式的getLine()
可以与char*
一起使用,但不是免费函数。 它是std::istream
的成员函数,std::cin
继承该函数。 下面是为使用它而修改的代码:
#include<iostream>
int main()
{
char name[50];
std::cout<<"Name: ";
std::cin.getline(name, sizeof name);
std::cout<<"Name: "<<name;
return 0;
}
Std::String是由字符组成的类,而不是字符数组。 意思是两种类型都不一样。 请参阅std::string definition:here
getline函数需要一个字符串。 它对字符数组不起作用。 参见文档:here