2010-09-03 9 views

Respuesta

25

Debido %s indica un char*, no un std::string. s.c_str() uso o mejor todavía uso, iostreams:

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string s("bla"); 
    std::cout << s << "\n"; 
} 
+0

Lo he intentado con std :: cout y el compilador emite un error: binario '<<': no ​​se ha encontrado ningún operador que tome un operando de la derecha del tipo 'std :: string' – user429400

+0

Eso es muy extraño. ¿Qué implementación de C++ es esta? – pjc50

+0

He modificado el código para que sea autónomo y compilable (y probado). –

18

Necesita usar c_str para obtener una cadena equivalente al contenido de la cadena, ya que printf no sabe cómo imprimir un objeto de cadena.

string s("bla"); 
printf("%s \n", s.c_str()); 

su lugar sólo se puede hacer:

string s("bla"); 
std::cout<<s; 
+1

Gracias ... btw - ¿por qué? printf no sabe cómo manejar cadenas? ¿Hay algún otro método que pueda usar? – user429400

+0

Lo he intentado con std :: cout y el compilador emite un error: binario '<<': no ​​se encuentra operador que tome un operando de la derecha del tipo 'std :: string' – user429400

+0

printf no sabe cómo manejarlo C++ std :: string s, funciona en cadenas c (array de char con \ 0 para marcar el final de la cadena), tenga en cuenta que debido a la compatibilidad con versiones anteriores C++ scripts de cadenas C++, es decir, solo "bla" en lugar de string s ("bla ") son cadenas c y no objetos de la clase C++ std :: string. –

1

he conseguido imprimir la cadena usando "cout" cuando cambié de:

#include <string.h> 

a

#include <string> 

Deseo Yo entendería por qué es importante ...

+1

Creo que este comentario ha sido destrozado? – pjc50

+0

De 'incluir' a' incluir'? Qué quieres decir ? –

+0

SO estaba destruyendo su comentario, lo arreglé agregando los #s. – egrunin