C++ 为什么puts()不适用于声明的字符串?

C++ 为什么puts()不适用于声明的字符串?,c++,string,output,puts,C++,String,Output,Puts,这里,最后一个放置(p)给了我一个错误puts与const char*p一起工作,其中指向的字符不能更改,但指针本身可以更改,那么为什么它与字符数组一起工作?puts()需要一个以null结尾的const char*指针作为输入 put(s)之所以有效,是因为s是一个char[]数组,该数组衰减为char*指针,然后该指针隐式转换为const char*指针 put(p)不起作用,因为p是一个std::string,并且没有将std::string作为输入的put()重载。您需要使用std::s

这里,最后一个
放置(p)给了我一个错误
puts
const char*p
一起工作,其中指向的字符不能更改,但指针本身可以更改,那么为什么它与字符数组一起工作?

puts()
需要一个以null结尾的
const char*
指针作为输入

put(s)
之所以有效,是因为
s
是一个
char[]
数组,该数组衰减为
char*
指针,然后该指针隐式转换为
const char*
指针

put(p)
不起作用,因为
p
是一个
std::string
,并且没有将
std::string
作为输入的
put()
重载。您需要使用
std::string::c_str()
方法获取指向字符串数据的合适
const char*
指针:

char s[] = "asqa0";
string p;

cin >> p;

puts(s);
puts(p);

但是,在C++中,没有任何理由使用<代码>引用(或)>代码>。使用<代码> STD::CUT,它已经加载了操作器,使用的是Pube,它是用C++ STD字符串的C打印功能。您可以使用std::cout或put(p.c_str())来修复代码。
puts(p.c_str());
cout << s;
cout << p;