|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
![]() |
#1 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
![]() |
Fine Array in C
di solito, se non ne so prima il contenuto, dichiaro un array di char in questo modo: #define SIZE 1024 char miaStringa[SIZE]; nell'esecuzione del programma come posso intercettare se si prova a scrivere oltre "miaStringa[SIZE-1]"? es: acquisendo una stringa con gets(miaStringa), se l'utente scrive un poema crea un bel pasticcio... spero di essermi spiegato decentemente... ![]() Ciao
___________________________________
...ad ogni alba sorgerà il tuo profumo |
![]() |
![]() |
![]() |
#2 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Usi la strlen....
size_t strlen(const char *s); Ma se fai una "gets" e l'utente (che ha sempre il diavolo in corpo) ti fa andare in buffer overflow .. tu per sicurezza metti li terminatore '\0' all'ultimo carattere della tua stringa (dopo aver fatto gets) .. in questo modo ti assicuri che qualsiasi chiamata a funzioni successive provocherà una letura non oltre il terminatore... Consiglio sempre di prendere l'input carattere per carattere... questo almeno in C puro. Bye ![]() |
![]() |
![]() |
![]() |
#3 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
![]() |
scusa la mia ignoranza ma... cosa rappresenta "size_t"?
per il resto quindi: gets(stringa); stringa[SIZE-1] = '/0'; così? ma nella parte di memoria eccedente che ho occupato con gets() non sovrascrivo?
___________________________________
...ad ogni alba sorgerà il tuo profumo |
![]() |
![]() |
![]() |
#4 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Diciamo che size_t è un tipo specifico per le "misure" .. praticamente in questo caso è un int.. size_t è una convenzione che si usa in fase di misurazioni o in return di valori di lunghezza...
Certo che sovrascrivi (a meno che la funzione non sia progettata per non farlo.. molte funzioni lo sono compresa "gets").. ma almeno eviti di leggere o di fare operazioi con le schifezze .. ecco perché consiglio di prendere sempre l'input carattere per carattere... Bye ![]() |
![]() |
![]() |
![]() |
#5 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
![]() |
(Y) grazie...
sei fantastico.... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
___________________________________
...ad ogni alba sorgerà il tuo profumo |
![]() |
![]() |
![]() |
#6 |
Linux Supporter
Registrato: 02-12-2000
Loc.: Monza
Messaggi: 1.987
![]() |
Usa fgets , mai gets, nn e' sicura..
char * fgets(char *str, int size, FILE *stream); Al piu' vengono letti size-1 caratteri, e sei a posto, nn devi fare altri controlli ![]() |
![]() |
![]() |
![]() |
#7 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
(Y)
![]() Bye ![]() |
![]() |
![]() |
![]() |
#8 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
![]() |
(Y) ok
![]()
___________________________________
...ad ogni alba sorgerà il tuo profumo |
![]() |
![]() |
![]() |
#9 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
![]() |
... ho scritto:
fgets(stringa, SIZE-2); come "FILE *stream" cosa metto? non ho bisogno di salvarlo! posso fare una cosa di questo tipo? : fgets(stringa, SIZE-2, stringa) ciao...
___________________________________
...ad ogni alba sorgerà il tuo profumo |
![]() |
![]() |
![]() |
#10 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
![]() |
![]() ![]() ![]() ![]() ![]() ![]()
___________________________________
...ad ogni alba sorgerà il tuo profumo |
![]() |
![]() |
![]() |
#11 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
![]() |
e ho notato che SIZE-2 non è corretto....
___________________________________
...ad ogni alba sorgerà il tuo profumo |
![]() |
![]() |
![]() |
#12 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
fgets(tua stringa,sizeof(tua stringa),stdin);
|
![]() |
![]() |
![]() |
#13 |
Linux Supporter
Registrato: 02-12-2000
Loc.: Monza
Messaggi: 1.987
![]() |
#define STR_SIZE 4096
char string[STR_SIZE]; fgets(string, STR_SIZE, stdin); ![]() |
![]() |
![]() |
![]() |
#14 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
![]() |
(Y)
___________________________________
...ad ogni alba sorgerà il tuo profumo |
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
![]() |
||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
[RH] che fine ha fatto redhat? | doctorwho | Linux e altri Sistemi Operativi | 3 | 12-07-2005 11.55.59 |
Che fine ha fatto l'ex min.Sirchia | riker | Chiacchiere in libertà | 16 | 25-04-2005 17.47.04 |
problemi a fine scrittura | ivix | Masterizzazione Giochi Games | 6 | 11-02-2004 21.19.48 |
Che fine ha fatto GiacomoCT | handyman | Chiacchiere in libertà | 1 | 03-12-2003 00.53.23 |
Terminator 3...che sia proprio la fine? | Lu(a | Chiacchiere in libertà | 49 | 25-09-2003 15.47.04 |