2013-11-23 13 views
17

Come diceva il titolo, sono curioso di sapere se esiste un modo per leggere una stringa C++ con scanf.Leggi stringa C++ con scanf

so che posso leggere ogni char e inserirlo nella stringa meritato, ma vorrei qualcosa di simile:

string a; 
scanf("%SOMETHING", &a); 

gets() anche non funziona.

Grazie in anticipo!

+7

Solo curioso, perché non puoi usare cin o getline? –

+0

Su alcuni compilatori che usano gli stream ci vuole un sacco di tempo ... e sto codificando per un compilatore come quello qui .. –

+1

@Vlad: dovresti iniziare il tuo programma con 'std :: ios_base :: syc_with_stdio (false);' se la lettura dallo standard input è troppo lenta. –

risposta

13

Non c'è situazione in cui gets() deve essere utilizzato! È sempre errato per utilizzare gets() e viene rimosso da C11 e rimosso da C++ 14.

scanf() non supportano alcuna classe C++. Tuttavia, è possibile memorizzare il risultato da scanf() in un std::string:

std::string str(100, ' '); 
if (1 == scanf("%*s", &str[0], str.size())) { 
    // ... 
} 

io non sono del tutto sicuro sul modo di specificare che buffer di lunghezza in scanf() e ordine in cui i parametri vanno (c'è una possibilità che la i parametri &str[0] e str.size() devono essere invertiti e potrebbe mancare un . nella stringa di formato). Si noti che il risultante std::string conterrà un carattere null terminante e non avrà modificato la sua dimensione.

Ovviamente, vorrei solo usare if (std::cin >> str) { ... } ma questa è una domanda diversa.

+0

Sei sicuro che il tuo codice è in fase di compilazione? Ricevo errore di compilazione usando sia C++ 98 che C++ 11 –

+0

@Vlad: penserei che il codice dovrebbe essere compilato partendo dal presupposto che tu abbia incluso '' e '' e si trovi all'interno di una funzione, ovviamente. Che messaggi di errore ottieni? –

+0

@Vlad: OK, vedo: sembra che 'std :: string' non dichiari un costruttore che prende solo una dimensione. Usando 'std :: string str (100, '');' risolve questo problema. –

20

questo può funzionare

char tmp[101]; 
scanf("%100s", tmp); 
string a= tmp; 
+3

Non sapevo di poter inizializzare una stringa C++ con un char [] .. grazie mille! :) –

-3
string temp; 
scanf("%s",&temp.c_str()); 

spero che funzionerà!

+1

Questa non è una buona idea.'scanf' si aspetta un puntatore non-const in char. – dreamlax