почему put () не работает с объявленной строкой? - PullRequest
0 голосов
/ 18 января 2019
char s[] = "asqa0";
string p;

cin >> p;

puts(s);
puts(p);

здесь, последний puts(p); выдает мне ошибку. puts работает с const char *p, когда указанный символ не может быть изменен, но указатель может быть изменен сам, тогда почему он работает с массивом символов?

1 Ответ

0 голосов
/ 18 января 2019

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;
...