提问者:小点点

字符和字符串之间的区别


字符串只是一个字符数组(末尾有一个'\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;
}


共3个答案

匿名用户

您正在混合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,其中stringchar*的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