Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

linguaggio C: delucidazioni

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

1
voti

[11] Re: specifiche di conversione in C

Messaggioda Foto UtentePietroBaima » 25 feb 2013, 18:42

Giusto Foto UtenteDirtyDeeds. Da questo punto di vista è meglio la get.

Però esiste un metodo per evitare il buffer overflow con la scanf, quello di formattare l'input:

Codice: Seleziona tutto
char array[4] ;
scanf("%4s",array);
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12207
Iscritto il: 12 ago 2012, 1:20
Località: Londra

1
voti

[12] Re: specifiche di conversione in C

Messaggioda Foto UtenteDirtyDeeds » 25 feb 2013, 19:05

Occhio che con un array di 4 caratteri l'input può essere al più di 3 caratteri:

Codice: Seleziona tutto
char array[4] ;
scanf("%3s",array);
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[13] Re: specifiche di conversione in C

Messaggioda Foto Utentelillo » 25 feb 2013, 19:08

...perché l'ultimo è il carattere di terminazione \0.
ragazzi grazie di cuore a tutti.
:ok:
Avatar utente
Foto Utentelillo
20,5k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 4178
Iscritto il: 25 nov 2010, 11:30
Località: Nuovo Mondo

0
voti

[14] Re: specifiche di conversione in C

Messaggioda Foto UtenteDirtyDeeds » 25 feb 2013, 19:10

lillo ha scritto:l'ultimo è l'end-of-file.


L'end-of-string, diciamo, cioè il '\0' ;-)
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[15] Re: specifiche di conversione in C

Messaggioda Foto Utentelillo » 25 feb 2013, 19:11

hai fatto in tempo a leggere :lol:
avevo modificato.
Avatar utente
Foto Utentelillo
20,5k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 4178
Iscritto il: 25 nov 2010, 11:30
Località: Nuovo Mondo

0
voti

[16] Re: specifiche di conversione in C

Messaggioda Foto UtentePietroBaima » 25 feb 2013, 19:32

DirtyDeeds ha scritto:Occhio che con un array di 4 caratteri l'input può essere al più di 3 caratteri:

aargh, giusto!
Potrei salvarmi dicendo che mi sono sbagliato perché creo sempre dei buffer più larghi del necessario e riempio i caratteri che non uso con dei marcatori perché voglio rendermi conto se il mio programma è soggetto ad uno string attack, ma ... non è vero... mi sono solo sbagliato :(
(anche perché se facessi davvero così, sbagliando come ho fatto adesso, il programma penserebbe subito di essere sotto attacco!! beh, almeno mi renderei conto dei buffer overflow ... :mrgreen: )

Grazie Foto UtenteDirtyDeeds! :ok:
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12207
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[17] Re: specifiche di conversione in C

Messaggioda Foto UtentePietroBaima » 25 feb 2013, 19:34

lillo ha scritto:ragazzi grazie di cuore a tutti.

Prego, ma, come vedi, controlla sempre bene quel che ti dico...
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12207
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[18] Re: specifiche di conversione in C

Messaggioda Foto UtenteDirtyDeeds » 25 feb 2013, 19:37

Foto Utentelillo, tieni comunque presente una cosa con la scanf. Prova a far girare il programmino sotto e vedi cosa succede se alla prima richiesta di input rispondi con una stringa non numerica ;-)

Codice: Seleziona tutto
#include<stdio.h>

#define DATA_LEN 5

int main(void)
{
    float data[DATA_LEN];
    int i;

    for(i = 0; i < DATA_LEN; i++) {
        printf("Numero %d: ",i+1);
        scanf("%f",&data[i]);
    }


    for(i = 0; i < DATA_LEN; i++)
        printf("%f\n",data[i]);

  return 0;
}
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[19] Re: specifiche di conversione in C

Messaggioda Foto UtentePietroBaima » 25 feb 2013, 20:15

ah, bella !
Io userei scanf formattato su una stringa e poi userei atof.
Esiste altro?
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12207
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[20] Re: specifiche di conversione in C

Messaggioda Foto UtenteTardoFreak » 25 feb 2013, 20:39

Io invece farei una scanf su una stringa bella lunga, un bel buffer.
Dopo me la lavoro come dico io. :cool:
Sarà un po' da rozzo ma funziona ed evita casini.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

PrecedenteProssimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti