正在将字符串转换为const char*

Converting string into const char *

本文关键字:const char 转换 字符串      更新时间:2023-10-16

下面的代码有什么不好的地方吗?虽然它运行得很好,但在初始化它之前,我应该先为字符指针分配一个内存吗?

const char *a;
string  b;
getline(cin, b) ;
a=&b[0u];

从C++11开始就很好。

在C++11之前,没有正式的保证operator[]会返回对字符的引用,该字符将是以null结尾的字符数组(即C样式字符串)的一部分。缺少保证的一个后果是,如果b是一个空的非const字符串,那么&b[0u]将是未定义的行为。

(实际实现通常表现正确,因为这是实现std::string的唯一合理方式,但那是另一回事。)

另请参阅http://en.cppreference.com/w/cpp/string/basic_string/operator_at:

reference       operator[]( size_type pos );

(…)

如果是pos == size(),则引用值为CharT()的字符(null字符)。

(自C++11起)

尽管如此,您发布的代码并不是特别好的风格。为什么要创建一个具有未初始化值的指针,然后稍后再为其赋值,为什么还要使用更复杂的语法呢?

以下是代码的改进版本:

std::string b;
std::getline(std::cin, b);
auto const a = b.c_str();

在这个版本中,aconst,所以您不能意外地使它指向其他内容;您还可以使编译器自动推导类型(char const*)。c_str()是一种更清晰的方式来说明代码的实际含义。

根据@goodsvibration的建议,您应该使用c_str->原因:如果您使用的编译器不支持C++11和更高版本的标准,std::string对象将不包括适当的null终止,这在使用类C方法时表示字符串的结束。c_str注意正确的"格式"。有关更多信息,请参阅此stackoverflow链接。

希望能有所帮助。

只需使用字符串::c_str()方法即可获得const char*

string strText = "My String";
const char * chText = strText.c_str ();

这个有两种方法

  1. std::string::c_str
  2. std::string::data

您可以根据口味、可读性等使用任何人。

std::string s;
std::getline(std::cin, s);
const char * a = s.c_str();