C++ char和string之间的区别

C++ char和string之间的区别,c++,string,character,C++,String,Character,字符串只是一个字符数组,结尾是“\0”或空字符。但是,当我使用C++中的GETLIN函数时,如果我使用char,它会给我一个错误,但是对于字符串没有错误。 以下工作: #include<iostream> int main() { std::string name; std::cout<<"Name: "; getline(std::cin,name); std::cout<<"Name: "<<name;

字符串只是一个字符数组,结尾是“\0”或空字符。但是,当我使用C++中的GETLIN函数时,如果我使用char,它会给我一个错误,但是对于字符串没有错误。 以下工作:

#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;
}

< p>你正在混合C字符串和C++字符串。 字符串只是一个字符数组,结尾是“\0”或空字符。这对于C字符串是正确的。STD::代码中的字符串是C++字符串。它们根本不同。C++字符串不是数组字符。它是std::string类的对象。你可以将C字符串复制到C++字符串中,并且可以用C字符串初始化C++字符串。您可以用STD::Str::CyStr.< /P>将C++字符串转换为const C字符串。
getline需要一个std::字符串作为第二个参数。不能将其与C字符串一起使用。

std::string是由字符组成的类,而不是字符数组。这意味着这两种类型是不同的。请参阅std::字符串定义:


getline函数需要一个字符串。它不适用于字符数组。请参阅文档:

您可能会想到类似C中的cs50.h,其中string是char*的typedef。这不是C++中的情况,其中STD::string实际上是完全不同的类型。

有一种形式的可以与char*一起使用,但不是自由函数。它是std::cin继承的std::istream的成员函数。以下是修改后的代码以使用它:

#include<iostream>
int main()
{
    char name[50];
    std::cout<<"Name: ";
    std::cin.getline(name, sizeof name);
    std::cout<<"Name: "<<name;
    return 0;
}
这很简单

字符通常是ASCII中的单个字符。例如a、b、c和其他


另一方面,字符串通常是一个集合或一个接一个的系列。你好,嗨,兄弟。< /P>你正在混合C字符串和C++字符串。字符串只是一个字符数组,结尾是“\0”或空字符。这对于C字符串是正确的。STD::String是一个C++字符串。它们根本不同。为了理解,可以说字符串是字符数组,末尾有“\0”,但这并不是那么简单。std::string为它定义了许多函数,这些函数对字符数组不起作用。std::string实际上是基本C字符串的动态类包装器。std::getline需要std::字符串,而不是char*。您可能希望在特定的情况下使用fgsNeNT、STDIN、50,但在C++的上下文中不需要STD::string存在。因此,您几乎永远不会发现需要遇到char*、const char*等,除非在某些重要的情况下需要它们,例如,如果您使用某个外部C库。std::string是一种管理字符集合的类类型。字符数组是连续内存块中字符的原始集合,即完全不同的类型。getline具有用于读取std::string的重载,但不用于读取字符的原始数组。但是,输入流有一个成员函数来读取字符数组,而不是std::string,因此,在第二种情况下,在std::cin.getlinename、sizeofname或更粗略地使用std::cin.getlinename,50。