PDA

Visualizza la versione completa : [c] leggere stringa da tastiera


rufuss
17-05-2010, 19:21
ciao a tutti! :ciauz:

char *s = NULL;
scanf("%s",s);

mi aspetto che in s ci sia la stringa digitata ma invece c'e' NULL ....perche'? :master:

come faccio a leggere una stringa da tastiera? :)

MItaly
17-05-2010, 19:25
Perché scanf non alloca la memoria della stringa al posto tuo, ma si aspetta che sia già stata allocata. Pertanto dovrai fare qualcosa del genere:


char s[80];
scanf("%79s",s);

Il 79 è per dire alla scanf di non leggere più di 79 caratteri, dati che in s c'è spazio solo per 79 caratteri più il NUL (terminatore finale).

rufuss
17-05-2010, 19:30
e se non so la lunghezza della stringa digitata?

MItaly
17-05-2010, 20:06
Generalmente si crea un buffer di dimensioni sufficienti per accogliere la più lunga stringa che possa essere ragionevolmente inserita, anche se un approccio migliore può essere recuperare la stringa "a rate" con la fgets in un buffer dinamico da riallocare di volta in volta, espandendolo.

rufuss
17-05-2010, 20:54
grazie.....sempre su questo argomento:


char string[50];
scanf ("%s",string);

digito : ciao pluto bello

in string ho solo "ciao" ed il resto? :master:

oregon
17-05-2010, 20:57
Al posto della scanf utilizza la fgets


fgets(string, 50, stdin);

rufuss
17-05-2010, 21:07
Grazie! :) per curiosita' che problemi dava la scanf?

oregon
17-05-2010, 21:23
Nessun problema ... per la scanf uno spazio è un delimitatore.

Loading