2011-01-20 27 views
6

Ho difficoltà a dichiarare una variabile stringa. Codice e gli errori sono qui: http://pastebin.com/TEQCxpZd Qualche idea su cosa sto facendo male? Inoltre, ti preghiamo di tenerlo indipendente dalla piattaforma. Grazie!Dichiarazione variabile stringa C++

#include <stdio.h> 
#include <string> 
using namespace std; 

int main() 
{ 
    string input; //Declare variable holding a string 

    input = scanf; //Get input and assign it to variable 
    printf(input); //Print text 
    return 0; 
} 


Getting this from GCC: 

main.cpp: In function ‘int main()’: 
main.cpp:53:10: error: invalid conversion from ‘int (*)(const char*, ...)’ to ‘char’ 
main.cpp:53:10: error: initializing argument 1 of ‘std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string<char>]’ 
main.cpp:54:14: error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int printf(const char*, ...)’ 
+2

Cosa ti ha dato l'idea 'input = scanf' era valido? – GManNickG

+0

Forse da Pascal dove puoi chiamare una funzione senza '()'. – dan04

+0

Questo è strano, il C++ non è Pascal. – GManNickG

risposta

5

Si sta mescolando C++ e c I/O. In C++ è,

#include <string> 
#include <iostream> 

int main(void) 
{ 
    std::string input; 
    std::cin >> input; 
    std::cout << input; 
    return 0; 
} 
+0

Ora sto ricevendo questo errore: http://pastebin.com/GuEVJ3FY – Mike

+1

@Mike: hai incluso l'intestazione iostream? '#include ' Inoltre, dovresti probabilmente usare g ++ per compilare programmi C++, piuttosto che gcc. –

+0

Ho incluso iostream. Il problema era nel terminale dovevo digitare g ++ main.cpp -o hello_world invece di gcc. Grazie, grazie! – Mike

2

cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int printf(const char*, ...)’

input = scanf; //Get input and assign it to variable 

si sta cercando di assegnare il puntatore funzione di-scanf ad una variabile stringa. Non puoi farlo, motivo per cui stai ricevendo il primo errore. La sintassi corretta sarebbe.

char buffer[BIG_ENOUGH_SIZE]; 
scanf("%*s", sizeof(buffer) - 1, buffer); 
input = buffer; 

Ma questo è un modo molto stile C di fare le cose. Il modo idiomatico di leggere l'input in C++ è con std::cin >> input come suggerito da Nathan.

cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int printf(const char*, ...)’

printf(input); //Print text 

printf guadagnato un const char* come primo argomento, non un std::string. È possibile utilizzare .c_str() per convertire in una stringa in stile C. Ma mai passare l'input dell'utente come primo argomento a printf; l'utente può fare cose sgradevoli inserendo % nella stringa. Se ti ostini a uscita C-stile, la sintassi corretta è:

printf("%s", input.c_str()); 

Ma il C++ - alternativa stile è std::cout << input;.

+0

Beh, non riesco nemmeno a compilare correttamente Hello World. Penso che ci sia qualcosa di sbagliato nel compilatore, che il codice sia giusto o no, so che non c'è niente di sbagliato con #include usando namespace std; int main() { \t cout << "Ciao mondo!" << endl; \t ritorno 0; } – Mike

+0

Ciò che sembra più interessante qui è che quando si costruisce sotto MSVC il cast implicito da std :: string a const char * riesce ma non quando è compilato con GCC. Immagino che questo sia dovuto al fatto che l'implementazione MSVC di std :: string contiene un operatore cast per const char * mentre l'implementazione GCC no? –

1

Capisco la domanda: come si fa una dichiarazione di stringa in C++? Ecco un breve programma per dimostrare:

#include<iostream> 
#include<cstdlib> 
using namespace std; 
int main() 
{ 
    string your_name; 
    cout << "Enter your name: "; 
    cin >> your_name; 
    cout << "Hi, " << your_name << "!\n"; 
    return 0; 
} 

Quindi, includono cstdlib all'inizio del vostro programma. In termini pratici, ciò significa digitare string invece di std :: string, cout invece di std :: cout e così via. La variabile stringa stessa (nell'esempio, la variabile stringa è nome_utente) viene dichiarata con una stringa.

Diciamo che hai salvato il programma con il nome del file, 'str_example.cpp' Per compilare il programma nella riga di comando (in Linux):

g++ -o str_example str_example.cpp 

Questo crea un file oggetto eseguibile chiamato str_example (nessuna estensione di file). E, infine, supponendo che si sta nella stessa directory del programma, per eseguirlo:

./str_example 

La pagina man per g ++ è abbondante ma non incluso di default. Per installare la documentazione g ++ usando aptitude package manager:

sudo apt-get install gcc-7-doc 

Si noti che il "7" si riferisce alla versione 7; la versione attuale al momento della scrittura. Spero possa aiutare.

Problemi correlati