puts()
ожидает указатель const char *
с нулевым символом в конце в качестве ввода.
puts(s)
работает, потому что s
- это массив char[]
, который распадается на указатель char *
, который затем неявно преобразуется в указатель const char *
.
puts(p)
не работает, потому что p
является std::string
, и нет перегрузки puts()
, которая принимает std::string
в качестве ввода. Вам нужно будет использовать метод std::string::c_str()
, чтобы получить подходящий const char *
указатель на строковые данные:
puts(p.c_str());
Однако просто нет веской причины использовать puts()
в C ++. Вместо этого используйте std::cout
, что перегружает operator<<
для данных const char *
и std::string
:
cout << s;
cout << p;