Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-11-2008, 11: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, 13: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, 16: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, 17: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, 17: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, 17: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, 17: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, 17: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


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Ningtendo PXBOX 5: PS5, Xbox Series X e ...
Scossone in Ubisoft: il boss di The Divi...
Nuovo Media Creation Tool per Windows 11...
Animazioni credibili per ingannare gli u...
Hyundai mostra il camper elettrico STARI...
Qual è l'auto elettrica più...
Google amplia il controllo dell'utente s...
TIM annuncia una nuova rimodulazione per...
Annunciato un altro membro del cast dell...
Google testa le 'Skills' su Chrome: una ...
Stop a Zenfone e ROG Phone: ASUS punta t...
Anche AMD cambia i piani: priorità...
Allarme rincari telefonia: l'UE potrebbe...
Samsung: produzione di memoria DRAM in a...
Undicenne uccide il padre dopo che gli a...
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:53.


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