Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-11-2008, 10:43   #1
willygroup
Junior Member
 
L'Avatar di willygroup
 
Iscritto dal: Oct 2008
Messaggi: 12
[c++][Win32] Open/Save File Common Dialog e passaggio stringhe a funzioni

Ciao,
ho un problema che probabilmente ai più sembrerà banale, ma è qualche ora che ci sbatto la testa e non riesco a risolverlo.

Codice:
// Programma principale

char * pippo = DoFileOpen();

// Qui visualizzo la stringa con un messageBox ed effettivamente
// la restituisce correttamente

ApriFile(pippo);
Codice:
//DoFileOpen

char * DoFileOpen(){

OPENFILENAMEA ofn;
.
.
.
return ofn.lpstrFile;
}
Codice:
//ApriFile
ApriFile(char * nomeFile){

(2)
// A questo punto se visualizzo nomeFile questo è composto da caratteri strani.

fopen_s(nomeFile, etc, etc)-> Da' errore

}
Se nel punto (1) inserisco questo codice:
char str[400];
sprintf_s(str,400,pippo);
in str il nome del file è troncato.

Se con questo metodo se salvo in una directory "corta" funziona!

Come risolvo?
Inoltre mi consigliate qualche articolo/capitolo di libro che mi faccia capire bene l'uso dei puntatori?
willygroup è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 12:23   #2
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 ritorni ofn.lpstrFile, la memoria allocata da per ofn viene liberata alla fine della funzione, è quindi possibile che venga sovrascritta.

Per ovviare il problema:

- allochi un buffer che passi per riferimento a DoOpenFile e lo riempi con strcpy
- allochi il buffer dentro DoOpenFile e lo riempi con strcpy (soluzione secondo me molto brutta)
- usi una string e quindi ritorni string(ofn.lpstrFile) per copia
- usi una string passata per riferimento
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 15:53   #3
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
se stai usando MFC più che una string dovresti usare una CStringT.
inoltre togliti dalla testa funzioni come fopen e sprintf, o le loro corrispondenti sicure di Visual C++: quelle fanno parte del C, non del C++, e sono supportate dal C++ solo per compatibilità coi sorgenti C.
stesso dicasi per strcpy e compagne.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 16:18   #4
willygroup
Junior Member
 
L'Avatar di willygroup
 
Iscritto dal: Oct 2008
Messaggi: 12
@ cionci
Grazie!
Ho risolto con le string.

@ fero86
Uso le Api di windows.

Quote:
inoltre togliti dalla testa funzioni come fopen e sprintf,
o le loro corrispondenti sicure di Visual C++:
Quindi anche fopen_s e sprintf_s?
Cosa dovrei usare al posto di queste funzioni?

Grazie,
Willy
willygroup è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 16:22   #5
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
Dovresti usare ad esempio CreateFile per aprire i file, ma visto che anche quelle funzioni sono wrapping delle api alla fine puoi tranquillamente continuare ad usarle.
Certo con le stringhe bisogna stare attenti
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 16:33   #6
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da willygroup Guarda i messaggi
Quindi anche fopen_s e sprintf_s?
Cosa dovrei usare al posto di queste funzioni?
il C++ introduce un'interfaccia di I/O completamente nuova e molto più facile da usare. al posto di fopen e fopen_s devi costruire un oggetto ifstream oppure ofstream, mentre al posto di sprintf e sprintf_s devi semplicemente usare l'operatore + di concatenazione definito da string.
in questi due siti c'è una buona documentazione delle librerie standard del C++:
http://www.cplusplus.com/reference/
http://www.cppreference.com/

dei due io preferisco il primo.

in particolare qui trovi la documentazione dell'interfaccia di I/O, di cui devi vedere le classi ifstream e ofstream:
http://www.cplusplus.com/reference/iostream/

mentre qui trovi la documentazione della classe string:
http://www.cplusplus.com/reference/string/
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 16:36   #7
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da cionci Guarda i messaggi
Dovresti usare ad esempio CreateFile per aprire i file, ma visto che anche quelle funzioni sono wrapping delle api alla fine puoi tranquillamente continuare ad usarle.
CreateFile gli offre un controllo di cui lui non ha bisogno (visto che usava fopen...); quello di cui ha bisogno è programmare in C++ anziché in C
ifstream e ofstream sono più facili da usare, ad esempio non è necessario scrivere dei format string per generare dei files di testo.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 16:37   #8
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
Ah ok...ti riferivi a quello, allora sono d'accordo
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Furto di identità su scala nazion...
HPE vende i primi sistemi AMD Helios per...
Suno AI nel mirino dell'Antitrust: conte...
Xiaomi avrebbe cancellato il suo prossim...
WINDTRE BUSINESS rinnova l’offerta mobil...
BMW inaugura la fabbrica di batterie da ...
Googlebook apre al modding: bootloader s...
Denuvo non molla, vuole scoprire chi &eg...
Il miglior portatile tuttofare a basso p...
Gli agenti di OpenAI hanno mandato in ti...
Follie Amazon Prime: Zenbook è un...
MicroSD SanDisk in offerta Prime Day: Ul...
Steve Jobs, 15 anni dopo: John Ternus e ...
LaLiga chiede all'Europa di inserire qua...
Microsoft festeggia cinque anni di Windo...
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: 15:50.


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