Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
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


Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
OnePlus ci riprova con la fascia bassa: ...
La Top 10 delle offerte Amazon del weeke...
XGIMI MoGo 2 Pro a 339€: Google TV con N...
Forum IT & Intelligence 2026: dall'A...
iPhone 16e per la prima volta a meno di ...
Stop Killing Games: Ross Scott convince ...
Annunciata la tuta di volo di Vast che s...
Vast presenta il nuovo Large Docking Ada...
Una denuncia getta ombre sulle batterie ...
DJI Avata 2 Fly Smart Combo a 526€: il d...
Alla guida della nuova auto elettrica ci...
GeForce RTX 3060 12 GB a giugno di nuovo...
Apple Music sarà sponsor ufficiale di Po...
The Mandalorian & Grogu: trailer fin...
Fedeltà record: Apple blinda gli utenti,...
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: 09:03.


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