|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
[C] Gestire stringhe multiparola in C
Ciao, mi trovo con uno stupido ma astioso problema.
In C ho sempre usato "scanf" come funzione per gestire in input tutti i tipi di dato possibile , ma mi sono trovato un po' confuso quando oggi , facendo un programmino d'allenamento per la gestione di alcune strutture di dato come liste concatenate, pile, code e alberi binari, ho scoperto che se si da in pasto a "scanf" una stringa multiparola (come ad esempio "Ciao Mondo", composta da 2 parole ) al primo spazio ci piazza un bel '\0' e tanti saluti!! Insomma , il mio "Ciao Mondo" diventa solo un "Ciao" . A me sembra una grossa limitazione sinceramente!! Ho cercato una funzione alternativa, e ho trovato "gets", ma gcc mi invia un inquietante messaggio alla compilazione : Codice:
melchior@melchior:~/Cprograms$ gcc -g stack.c -o stack /tmp/ccJzP4My.o(.text+0x3e): In function `main': /home/melchior/Cprograms/stack.c:21: warning: the `gets' function is dangerous and should not be used. A questo punto come faccio a prendere in input una stringa multiparola?? Datemi un consiglio . Grazie Ciao
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
Ciao AnonimoVeneziano
![]() Gets è una funzione molto pericolosa da utilizzare perchè non permette di stabilire l'esatto numero di caratteri da assegnare quindi l'ideale per "annidare" un buffer overflow. Devi usare fgets al posto di gets.
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Dopo un po' di spulciamento tra i man avevo già trovato "fgets"
![]() Grazie comunque max ![]() Ciao
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
scusate quindi supponiamo che ho un array
Codice:
char array[20]; Codice:
fgets(array,20,??); Codice:
gets(array); 1) la grandezza va contata già con il fine parola oppure no?? 2) che ci metto al posto dei punti di domanda?? stdin?? ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
meglio :
fgets(array, 20, stdin); Ciao
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
il prototipo comunque è eloquente:
char *fgets(char *str, int n, FILE *fp)
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
man fgets RULEZ
![]() Ciao
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jul 2000
Città: Amsterdam
Messaggi: 217
|
Che ne dici di questa:
scanf("%[^\n]", arr); ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
Quote:
![]() così si evitano brutti overflow giusto?! ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
ok mi autorispondo
![]() ![]() quante cose che si imparano ![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:10.