Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Forte della piattaforma Qualcomm Snapdragon X, il notebook Lenovo IdeaPad Slim 3 riesce a coniugare caratteristiche tecniche interessanti ad uno chassis robusto, con autonomia di funzionamento a batteria che va ben oltre la tipica giornata di lavoro. Un notebook dal costo accessibile pensato per l'utilizzo domestico o in ufficio, soprattutto con applicazioni native per architettura ARM
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli
OnePlus risponde alle esigenze di chi cerca un dispositivo indossabile dalle dimensioni contenute con OnePlus Watch 3 43mm. La versione ridotta del flagship mantiene gran parte delle caratteristiche del modello maggiore, offrendo un'esperienza completa in un formato compatto. Il suo limite più grande è abbastanza ovvio: l'autonomia non è il punto di forza di questo modello, ma si raggiungono comodamente le due giornate piene con un uso normale.
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura
BOOX Note Air4 C rappresenta l'ultima incarnazione della categoria dei tablet E Ink a colori di Onyx, e combina le prestazioni di un dispositivo Android con l'ottima tecnologia Kaleido 3 per il display. Con schermo da 10,3 pollici, un processore Qualcomm Snapdragon 750G e 6 GB di RAM, promette un'esperienza completa per lettura, scrittura e produttività. Il prezzo lo posiziona nel segmento premium, ma questo dispositivo è un vero spettacolo!
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-06-2005, 21:36   #1
Ricky
Senior Member
 
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
devo leggere una stringa con scanf....

allora...il problema è il seguente...

quando leggo una stringa con scanf("%s",stringa);

la scanf mi legge dallo stdin la sequenza di caratteri fino allo spazio e poi ci mette un \0 alla fine nelle stringa......ma se tipo voglio inserire una stringa con più parole separate da uno spazio? come devo fare? c'è qualcuno che ha già affrontato questo problema e magari l ha risolto? avevo pensato tipo a gets ma durante la compilazione mi dice che gets non deve essere utilizzata!? anche nel man di linux non son riuscito a trovare niente a parte qualcosa tipo l'utilizzo di [] ma non ho capito bene......
aiutoooooooo!
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300...
Ricky è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2005, 22:01   #2
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
strano che legga fino allo spazio, io mi ricordavo di aver affrontato problemi simili a programmazione 1, ma mi sembrava che leggesse tutto fino al newline...
cmq non vedo perché gets non dovrebbe essere utilizzata: noi a prog 1 l'abbiamo usata e i nostri programmi sono stati compilati su Linux senza problemi
(inutile dire che io i miei li ho testati sempre su Windows, quindi dovrebbe andar bene su entrambi i sistemi operativi)
cosa dice esattamente il warning del compilatore quando usi gets? sei sicuro di aver incluso la libreria in cui è dichiarata?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2005, 22:15   #3
DarkRevenge
Member
 
Iscritto dal: May 2005
Messaggi: 118
La gets ha il problema di non controllare la lunghezza della stringa che viene effettivamente data in input, quindi viene sconsigliata in quanto può causare problemi di buffer overflow.

Per leggere una stringa è possibile utilizzare la funzione fgets , alla quale deve essere passata anche la lunghezza massima della stringa (effettivamente ho riscontrato anche io gli stessi problemi con la scanf, ma sinceramente non so se c'è un modo per risolverli)...
DarkRevenge è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2005, 23:05   #4
Brazorv
Member
 
Iscritto dal: Aug 2004
Messaggi: 156
prova ad usare la scnaf così:

scanf(" %[^\n]",str);

devi lasciare uno spazio davanti al %
Brazorv è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2005, 23:55   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da DarkRevenge
La gets ha il problema di non controllare la lunghezza della stringa che viene effettivamente data in input, quindi viene sconsigliata in quanto può causare problemi di buffer overflow.

Per leggere una stringa è possibile utilizzare la funzione fgets , alla quale deve essere passata anche la lunghezza massima della stringa (effettivamente ho riscontrato anche io gli stessi problemi con la scanf, ma sinceramente non so se c'è un modo per risolverli)...
ma appunto, quel problema caratterizza anche
Codice:
scanf("%s", s);
(non so se è quello che intendevi dire); e poi non vedo perché il compilatore dovrebbe rompere le OO se uno vuole usare gets usa gets se il programma è a scopi didattici va più che bene e poi sinceramente mi pare anche abbastanza difficile un problema di sicurezza dovuto a una gets: per mandare in crash il programma si suppone che un ipotetico cracker abbia già accesso locale allo stdin del programma, ma se è così ce ne sono a milioni di modi di far crashare il prog.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2005, 00:19   #6
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da 71104
ma appunto, quel problema caratterizza anche
Codice:
scanf("%s", s);
(non so se è quello che intendevi dire); e poi non vedo perché il compilatore dovrebbe rompere le OO se uno vuole usare gets usa gets se il programma è a scopi didattici va più che bene e poi sinceramente mi pare anche abbastanza difficile un problema di sicurezza dovuto a una gets: per mandare in crash il programma si suppone che un ipotetico cracker abbia già accesso locale allo stdin del programma, ma se è così ce ne sono a milioni di modi di far crashare il prog.
No, il problema con gets è un altro, ma partendo dal compilatore...

se compili sotto Linux con gcc, è il compilatore stesso che come warning ti avvisa che non dovresti usare la gets. Il problema di sicurezza della gets e del buffer overflow, è che non puoi in nessun modo controllare la lunghezza della stringa che prendi. Non a caso, l'uso ne è vivamente sconsigliato su moltissimi testi, e non a caso, gcc dice vivamente di non usarla
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2005, 00:59   #7
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da RaouL_BennetH
No, il problema con gets è un altro, ma partendo dal compilatore...

se compili sotto Linux con gcc, è il compilatore stesso che come warning ti avvisa che non dovresti usare la gets. Il problema di sicurezza della gets e del buffer overflow, è che non puoi in nessun modo controllare la lunghezza della stringa che prendi. Non a caso, l'uso ne è vivamente sconsigliato su moltissimi testi, e non a caso, gcc dice vivamente di non usarla
ehm... l'avevo capito... -_-'
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2005, 09:59   #8
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
Quote:
Originariamente inviato da Ricky
quando leggo una stringa con scanf("%s",stringa);
Cosa che qualunque manuale recente sconsiglia di fare.
Quote:
la scanf mi legge dallo stdin la sequenza di caratteri fino allo spazio e poi ci mette un \0 alla fine nelle stringa
Ma senza preoccuparsi che lo spazio allocato sia sufficiente.
Quote:
ma se tipo voglio inserire una stringa con più parole separate da uno spazio?
Usa fgets.
Questo per leggere qualunque stringa.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2005, 21:10   #9
ilDave
Senior Member
 
L'Avatar di ilDave
 
Iscritto dal: Feb 2000
Città: Grugliasco, Torino
Messaggi: 175
scanf("%[A-Za-Z0-9 ]", %s);

Con questo prendi tutti i caratteri che cono lettere maiuscole, minuscole, numeri e spazi
Se ti servono altri caratteri, come la punteggiatura, aggiungili all'interno delle parentesi quadre :9
__________________
I 'm a dinosaur, somebody is digging my bones
ilDave è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2005, 11:39   #10
Ricky
Senior Member
 
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
ho fatto questa routine e sembra funzionare...
Codice:
int leggi_stringa(char *stringa,int n){
     char ch;   /*caratte di lettura  */
     int i=0;   /*contatore di stringa*/
    
     if (!stringa) return(-1);/*nel caso in cui la stringa non era stata allocata*/
     if (fflush(stdin)==EOF) printf("c'e' stato un errore nella pulizia dello stdin\n");
    /*questa funzione a volte basta a pulire lo stdin altre volte lo stdin si pulisce solo con il metodo adottato successivamente*/
    
    /*leggo da stdin fino a che non leggo un newline, newline precedenti verranno ignorati grazie all'utilizzo del controllo i=0*/ 
    while(((ch=getchar())!='\n')&&(i<n)||(i==0)){
	   if (ch!='\n'){stringa[i]=ch; i++;}/*se non sono una fine stringa memorizza in stringa[i]*/
    }
    
    if (i==n){ /*controllo l'overflow, in tal caso ho troncato lo stdin*/
	   while(getchar()!='\n');/*svuoto lo stdin di caratteri immondizia*/
    	   stringa[n-1]='\0';
	   return(-2);
    }
    if (i+1==n) i--;
    stringa[i+1]='\0';
    return(0);
 	

}
praticamente con getchar prendo tutti i caratteri da stdin fino al newline.
nel caso in cui ci siano newline vecchi nello stdin e cose vecchie pulisco lo stdin
che ne dite?
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300...
Ricky è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2005, 12:01   #11
sccc
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 1101
prova ad usare fflush(stdin)
sccc è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2005, 12:06   #12
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da Ricky
ho fatto questa routine e sembra funzionare...

praticamente con getchar prendo tutti i caratteri da stdin fino al newline.
nel caso in cui ci siano newline vecchi nello stdin e cose vecchie pulisco lo stdin
che ne dite?
che ripulire il buffer credo sia cosa buona e giusta
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2005, 12:29   #13
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
Usa la fgets che è piu sicura (mi è stata consigliata qua sul forum)
Codice:
fgets(stringa,MAXBUFF,stdin);
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school
Wind FTTE Vula 100/20 - Stats
Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX
-Yara- è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2005, 18:54   #14
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
Quote:
Originariamente inviato da Ricky
praticamente con getchar prendo tutti i caratteri da stdin fino al newline.
nel caso in cui ci siano newline vecchi nello stdin e cose vecchie pulisco lo stdin
che ne dite?
Che lo standard non definisce il comportamento di fflush su uno stream di input.
E che ch deve essere un int, e non un char (getchar può restituire EOF, che è un valore int diverso da qualunque char).
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli Recensione OnePlus Watch 3 43mm: lo smartwatch c...
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura BOOX Note Air4 C è uno spettacolo: il tab...
Recensione Sony Xperia 1 VII: lo smartphone per gli appassionati di fotografia Recensione Sony Xperia 1 VII: lo smartphone per ...
Attenti a Poco F7: può essere il best buy del 2025. Recensione Attenti a Poco F7: può essere il best buy...
La sonda spaziale NASA New Horizons (che...
HONOR MagicPad 3: il tablet con Snapdrag...
Qualcomm mischia le carte: in arrivo ci ...
Meta sceglie Google per lo sviluppo dell...
Redmi Note 15 Pro+: batteria più piccola...
Amazon, un weekend di svendite lampo, ta...
Tutte le offerte sui portatili: tre tutt...
Macchie addio per sempre: SpotClean ProH...
Smartphone con batteria da 8.000 mAh? On...
Dreame L10s Ultra Gen 2 al minimo storic...
Apple TV+ ora costa di più: il ca...
Ecco i 2 mini PC migliori di Amazon: 369...
L'amministrazione Trump investe in Intel...
Google dice addio ai tablet? Le priorit&...
La NASA e IBM hanno annunciato il nuovo ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:41.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v