为什么puts()无法与声明的字符串一起使用?

时间:2019-01-17 23:26:29

标签: c++ string output puts

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

cin >> p;

puts(s);
puts(p);

在这里,最后一个puts(p);给我一个错误。 putsconst char *p一起使用,其中指向的字符不能更改,但指针本身可以更改,那么为什么它可以与char数组一起使用?

1 个答案:

答案 0 :(得分:2)

puts()期望以空值结尾的const char *指针作为输入。

puts(s)之所以有效,是因为s是一个char[]数组,它会衰减char *指针,然后该指针可以隐式转换为{{ 1}}指针。

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

const char *

但是,根本没有充分的理由在C ++中使用puts(p.c_str()); 。请改用puts(),因为std::coutoperator<<的数据都已const char *超载:

std::string