Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
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: 2451
[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: 2451
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: 2451
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: 1451
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: 2451
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: 1451
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: 2451
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: 9571
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: 1451
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: 9571
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: 2451
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: 2451
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: 2451
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: 2451
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


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Intergalactic: The Heretic Prophet sar&a...
Gmail introduce la sezione Acquisti per ...
Con Data Transfer Essentials Google Clou...
Per i computer quantistici piovono milia...
SEGA si sbarazza di decine di prototipi ...
Borderlands 4 su Steam è un caso:...
Windows 10 si aggiorna ancora in antepri...
Samsung Galaxy S25 FE già in offerta su ...
Cyber Tyre: la tecnologia Pirelli che tr...
DeepMind vuole rivoluzionare Big Pharma ...
YouTuber 'taglia' la sua Switch 2 per in...
Microsoft, clima teso dopo i licenziamen...
Successo per Tineco a IFA 2025: ricca co...
Telemarketing e truffe telefoniche: il f...
BYD contro l'AD di Stellantis Antonio Fi...
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: 12:52.


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