Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-01-2005, 16: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, 16:27   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16216
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, 16: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, 19: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, 19:26   #5
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
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, 20: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, 21:20   #7
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
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, 21: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, 21: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, 21: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, 21:30   #11
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
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, 21: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, 21: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, 21: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, 21: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, 21: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 22:04.
MauryWeb è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2005, 22: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, 08: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, 14: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, 16: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


Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Qualcomm HBC supera la validazione in la...
Tachyum avvia la procedura di fallimento...
La sonda spaziale NASA Lucy ha raggiunto...
Le GeForce RTX 5000 scarseggiano, tornan...
Raspberry Pi 5, il prezzo è ormai...
I frigoriferi dei supermercati diventano...
Le vecchie fotocamere digitali compatte ...
La Cina potrebbe rinviare il ritorno del...
Verizon non è preoccupata della c...
RDNA 5 sulle APU AMD, ma non per tutti: ...
Marvell acquisisce Lumentum per 115 mili...
La febbre dei data center fa impennare i...
ECOVACS T90S OMNI crolla a 499€ su Amazo...
In Cina i camion elettrici hanno gi&agra...
Attacchi hacker ai supermercati in Europ...
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: 04:30.


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