Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Mentre Ubisoft vorrebbe chiedere agli utenti, all'occorrenza, di distruggere perfino le copie fisiche dei propri giochi, il movimento Stop Killing Games si sta battendo per preservare quella che l'Unione Europea ha già riconosciuto come una forma d'arte. Abbiamo avuto modo di parlare con Daniel Ondruska, portavoce dell'Iniziativa Europa volta a preservare la conservazione dei videogiochi
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Abbiamo provato il nuovo Galaxy S25 Edge, uno smartphone unico per il suo spessore di soli 5,8 mm e un peso super piuma. Parliamo di un device che ha pro e contro, ma sicuramente si differenzia dalla massa per la sua portabilità, ma non senza qualche compromesso. Ecco la nostra prova completa.
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
Pensato per il professionista sempre in movimento, HP Elitebook Ultra G1i 14 abbina una piattaforma Intel Core Ultra 7 ad una costruzione robusta, riuscendo a mantenere un peso contenuto e una facile trasportabilità. Ottime prestazioni per gli ambiti di produttività personale con un'autonomia lontano dalla presa di corrente che permette di lavorare per tutta la giornata
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-01-2005, 15:10   #1
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2449
[C++]Dubbio matrici

Salve a tutti,
ho appena fatto il seguente programma:

Codice:
#include <iostream.h>
#include <stdio.h>

int main()
	{
	const int righe=5,colonne=20; //crea una matrice da 5 righe e 20 colonne; le colonne sono le lettere
	char matrice[righe][colonne],scelta;
	int i;
	for(i=0;i<righe;i++)
		{
		cout<<"Inserire la parola di posto "<<i<<endl; 
		gets(matrice[i]);
	}
		
	do
		{
		cout<<"Desideri vedere la matrice? "<<endl;
		cin>>scelta;
	}while(scelta!='s');
	
	if(scelta=='s')
		{
		for(i=0;i<righe;i++)
			{
			cout<<matrice[i]<<"  ";
			}
		}
	getchar();
	}
Me lo compila correttamente e funziona, ma c++ mi da un warning:
Codice:
In file included from /usr/include/c++/3.3.2/backward/iostream.h:31,
                 from stringhe_matrici.cpp:1:
/usr/include/c++/3.3.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
stringhe_matrici.cpp:29:10: warning: no newline at end of file
/home/antonio/tmp/ccSqqUJT.o(.text+0x8c): In function `main':
: warning: the `gets' function is dangerous and should not be used.
In particolare l'ultimo in grassetto

__________________
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 13-01-2005, 15:27   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
Re: [C++]Dubbio matrici

Quote:
Originariamente inviato da -Yara-
Me lo compila correttamente e funziona, ma c++ mi da un warning:
Codice:
In file included from /usr/include/c++/3.3.2/backward/iostream.h:31,
                 from stringhe_matrici.cpp:1:
/usr/include/c++/3.3.2/backward/backward_warning.h:32:2: warning: #warning
This file includes at least one deprecated or antiquated header.
Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard.
Examples include substituting the <X> header for the <X.h> header for C++ includes,
or <sstream> instead of the deprecated header <strstream.h>.
To disable this warning use -Wno-deprecated.
Significa che mescoli funzioni "buone" con funzioni deprecate, cioe' che andrebbero sostituite con altre funzioni piu' recenti e "migliori".
Probabilmente si riferisce al fatto che mescoli input-output in stile C++ (iostream.h) e in stile C (stdio.h).
Inoltre, ti dice che se non vuoi che ti dia questo messaggio di avviso, devi passare il parametro -Wno-deprecated a gcc quando lo lanci.
Quote:
Codice:
stringhe_matrici.cpp:29:10: warning: no newline at end of file
Stai per caso usando emacs per scrivere il programma?
Perche' questo editor ha l'abitudine di non aggiungere automaticamente un carattere di fine riga alla fine di un file di testo.
Roba che si corregge in un attimo, comunque.
Quote:
Codice:
/home/antonio/tmp/ccSqqUJT.o(.text+0x8c): In function `main':
: warning: the `gets' function is dangerous and should not be used.
In particolare l'ultimo in grassetto
L'ultima in grassetto si spiega da sola: gets e' una delle funzioni fatte peggio nella libreria standard del C, provoca un sacco di problemi di sicurezza aprendo la porta a buffer overflow, e andrebbe sostituita con funzioni omologhe ma che facciano un controllo sul numero di caratteri della stringa di input, ad esempio fgets.
__________________
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 13-01-2005, 15:54   #3
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2449
Ti ringrazio.
Ho messo fgets, pero':
Codice:
In file included from /usr/include/c++/3.3.2/backward/iostream.h:31,
                 from stringhe_matrici.cpp:1:
/usr/include/c++/3.3.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
/usr/include/stdio.h: In function `int main()':
/usr/include/stdio.h:526: error: too few arguments to function `char* fgets(char*, int, FILE*)'
stringhe_matrici.cpp:12: error: at this point in file
stringhe_matrici.cpp:31:10: warning: no newline at end of file
Cosa vuol dire?



P.S. Come editor uso Kwrite
__________________
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 13-01-2005, 18:14   #4
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2449
UP
__________________
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 13-01-2005, 18:26   #5
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1449
Quote:
Originariamente inviato da -Yara-


Cosa vuol dire?



P.S. Come editor uso Kwrite
Vuol dire che sbagli a passargli gli argomenti, facci vedere come chiami fgets.
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2005, 19:25   #6
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2449
Quote:
Originariamente inviato da beppegrillo
Vuol dire che sbagli a passargli gli argomenti, facci vedere come chiami fgets.
Guarda, non ho ancora fatto le funzioni, cmq:
Codice:
#include <iostream.h>
#include <stdio.h>

int main()
        {
        const int righe=5,colonne=20; //crea una matrice da 5 righe e 20 colonne; le colonne sono le lettere
        char matrice[righe][colonne],scelta;
        int i;
        for(i=0;i<righe;i++)
                {
                cout<<"Inserire la parola di posto "<<i<<endl; 
                fgets(matrice[i]);
        }
                
        do
                {
                cout<<"Desideri vedere la matrice? "<<endl;
                cin>>scelta;
        }while(scelta!='s');
        
        if(scelta=='s')
                {
                for(i=0;i<righe;i++)
                        {
                        cout<<matrice[i]<<"  ";
                        }
                }
        getchar();
        }
__________________
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 13-01-2005, 20:20   #7
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1449
Quote:
Originariamente inviato da -Yara-
Guarda, non ho ancora fatto le funzioni, cmq:
Codice:
#include <iostream.h>
#include <stdio.h>

int main()
        {
        const int righe=5,colonne=20; //crea una matrice da 5 righe e 20 colonne; le colonne sono le lettere
        char matrice[righe][colonne],scelta;
        int i;
        for(i=0;i<righe;i++)
                {
                cout<<"Inserire la parola di posto "<<i<<endl; 
                fgets(matrice[i]);
        }
                
        do
                {
                cout<<"Desideri vedere la matrice? "<<endl;
                cin>>scelta;
        }while(scelta!='s');
        
        if(scelta=='s')
                {
                for(i=0;i<righe;i++)
                        {
                        cout<<matrice[i]<<"  ";
                        }
                }
        getchar();
        }
Ma fgets stà per file gets, io non vedo nessun file..
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2005, 20:23   #8
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2449
Quote:
Originariamente inviato da beppegrillo
Ma fgets stà per file gets, io non vedo nessun file..
Boh..me l'ha consigliata ZioSilvio al posto di gets...
__________________
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 13-01-2005, 20:26   #9
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
ti faccio un esempio d'uso di fgets per leggere 30 caratteri (massimo) dalla tastiera (stdin, cioè standard input) e memorizzarli nel vettore buffer (che chiaramente deve essere lungo almeno 30 char):

fgets(buffer, 30, stdin);

ok?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2005, 20:27   #10
MauryWeb
Senior Member
 
L'Avatar di MauryWeb
 
Iscritto dal: May 2002
Città: Torino
Messaggi: 616
se usi fgets(bla,bla,stdin) è come usare gets(...)


__________________
[INSERIRE QUI LA FIRMA]
MauryWeb è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2005, 20:30   #11
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1449
char *fgets(char *str, int n, FILE *stream);

Reads a line from the specified stream and stores it into the string pointed to by str. It stops when either (n-1) characters are read, the newline character is read, or the end-of-file is reached, whichever comes first. The newline character is copied to the string. A null character is appended to the end of the string.

On success a pointer to the string is returned. On error a null pointer is returned. If the end-of-file occurs before any characters have been read, the string remains unchanged.

Ovviamente puoi mettere anche standard input come stream.
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2005, 20:35   #12
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
Quote:
Originariamente inviato da MauryWeb
se usi fgets(bla,bla,stdin) è come usare gets(...)
non è come usare gets perchè in fgets il secondo "bla" che hai scritto serve per dare un limite ai caratteri letti, per evitare il buffer overflow.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2005, 20:42   #13
MauryWeb
Senior Member
 
L'Avatar di MauryWeb
 
Iscritto dal: May 2002
Città: Torino
Messaggi: 616
la mia non era una critica!

non intendevo dire che usando fgets() si hanno gli stessi problemi di vulnerabilità come se si usasse la gets()
__________________
[INSERIRE QUI LA FIRMA]
MauryWeb è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2005, 20:45   #14
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2449
Vi credo sulla parola
Nel mio caso..potrei mettere
Codice:
fgets(matrice[i],stdin);
No?
__________________
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 13-01-2005, 20:51   #15
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2449
Ho risolto cosi:
Codice:
#include <iostream.h>
#include <stdio.h>

int main()
        {
	const int righe=5,colonne=20; //crea una matrice da 5 righe e 20 colonne; le colonne sono le lettere
        char matrice[righe][colonne],scelta;
        int i;
        for(i=0;i<righe;i++)
                {
                cout<<"Inserire la parola di posto "<<i<<endl; 
                fgets(matrice[i],colonne,stdin);
        }
                
        do
                {
                cout<<"Desideri vedere la matrice? "<<endl;
                cin>>scelta;
        }while(scelta!='s');
        
        if(scelta=='s')
                {
                for(i=0;i<righe;i++)
                        {
                        cout<<matrice[i]<<"  ";
                        }
                }
        getchar();
        }
In pratica la costanten colonne contiene il numero massimo di caratteri che voglio io
Bello, ma perchè gets è considerato poco sicuro?
Se ho capito bene, è perchè se per esempio io ho una stringa da 20 caratteri e ne metto 30, questa scrive gli altri 10 caratteri in un altra area di memoria.
Ho detto una cazzata?
__________________
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 13-01-2005, 20:51   #16
MauryWeb
Senior Member
 
L'Avatar di MauryWeb
 
Iscritto dal: May 2002
Città: Torino
Messaggi: 616
Quote:
Originariamente inviato da -Yara-
Vi credo sulla parola
Nel mio caso..potrei mettere
Codice:
fgets(matrice[i],stdin);

Codice:
fgets(matrice[i],MAXBUFF,stdin);
__________________
[INSERIRE QUI LA FIRMA]

Ultima modifica di MauryWeb : 13-01-2005 alle 21:04.
MauryWeb è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2005, 21:07   #17
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2449
ho risposto su
__________________
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 14-01-2005, 07:56   #18
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Metti:

#include <iostream>
#include <cstdio>

using namespace std;


al posto di:

#include <iostream.h>
#include <stdio.h>

Il modo di includere che hai usato è deprecato...studiati qualcosa sui namespace...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2005, 13:51   #19
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2449
Quote:
Originariamente inviato da cionci
Metti:

#include <iostream>
#include <cstdio>

using namespace std;


al posto di:

#include <iostream.h>
#include <stdio.h>

Il modo di includere che hai usato è deprecato...studiati qualcosa sui namespace...
Ascolta..come mai devo mettere cstdio? perchè senza h? tra l'altro se metto iostream nel modo che mi hai detto tu da errore di compilazione (cout e cin undeclared)..Uso gcc versione 3.3.2
__________________
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 14-01-2005, 15:15   #20
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Se metti using namespace std; vedrai che funziona tutti... Gli include del C si mettono con la "c" davanti per includerle nel namespace std... Fai una ricerchina sui namespace...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Tesla sta per lanciare il Robotaxi nella...
Dead Island 2 arriva su Mac, ma a un pre...
FIA e Formula E rinnovano il matrimonio:...
Windows 11 24H2 approda su nuovi sistemi...
Le restrizioni americane hanno generato ...
Una Mercedes EQS con batterie allo stato...
Il robot Walker S2 della Cina cambia la ...
Cosa vuol dire "vantaggio quantisti...
Retelit punta sulla connettività ...
Novità WhatsApp: promemoria sui m...
AMD: la prossima generazione di schede v...
MediaWorld potrebbe diventare cinese: Ce...
Amazon in delirio da sconti: 22 articoli...
EOLO ha più di 700 mila utenti in...
Una spin-off del MIT ha creato dei super...
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: 06:18.


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