Próbuję wydrukować ciąg w następujący sposób:„printf” na smyczki wydruków bełkot
int main(){
string s("bla");
printf("%s \n", s);
.......
}
ale wszystkie uzyskać jest to przypadkowy bełkot.
Proszę wyjaśnić, dlaczego?
Próbuję wydrukować ciąg w następujący sposób:„printf” na smyczki wydruków bełkot
int main(){
string s("bla");
printf("%s \n", s);
.......
}
ale wszystkie uzyskać jest to przypadkowy bełkot.
Proszę wyjaśnić, dlaczego?
Ponieważ %s
wskazuje char*
, a nie std::string
. Użyj s.c_str()
albo jeszcze lepiej wykorzystać, iostreams:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s("bla");
std::cout << s << "\n";
}
Musisz użyć c_str, aby uzyskać ciąg znaków równoważny zawartości ciągu, ponieważ printf
nie wie, jak wydrukować obiekt ciągu.
string s("bla");
printf("%s \n", s.c_str());
Zamiast tego można po prostu zrobić:
string s("bla");
std::cout<<s;
Dziękuję ... btw - dlaczego? printf nie wie, jak obsługiwać ciągi znaków? Czy istnieje inna metoda, której mogę użyć? – user429400
Próbowałem już z std :: cout i kompilator wypisuje błąd: binarny "<<": nie znaleziono operatora, który bierze prawy operand typu 'std :: string' – user429400
printf nie wie jak obsługiwać C++ std :: string s, działa na łańcuchach c (tablica znaków z \ 0 do zaznaczenia końca łańcucha), zauważ, że z powodu wstecznej zgodności C++ C++ ciąg literałów, tj. po prostu "bla" zamiast ciągu s ("bla" ") są łańcuchami c, a nie obiektami klasy C++ std :: string. –
udało mi się wydrukować łańcuch za pomocą "cout", kiedy przełącza się z:
#include <string.h>
do
#include <string>
życzę Rozumiem, dlaczego to ma znaczenie ...
Dlaczego po prostu nie użyjesz
char s[]="bla";
Próbowałem go z std :: cout i kompilator wydaje błąd: binarny "<<": nie znaleziono operatora, który pobiera prawy operand typu "std :: string" – user429400
To bardzo dziwne. Która implementacja C++ jest taka? – pjc50
Zmieniłem kod, aby był samodzielny i można go kompilować (i przetestować). –