|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
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
}
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? |
|
|
|
|
|
#2 |
|
Senior Member
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 |
|
|
|
|
|
#3 |
|
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. |
|
|
|
|
|
#4 | |
|
Junior Member
Iscritto dal: Oct 2008
Messaggi: 12
|
@ cionci
Grazie! Ho risolto con le string. @ fero86 Uso le Api di windows. Quote:
Cosa dovrei usare al posto di queste funzioni? Grazie, Willy |
|
|
|
|
|
|
#5 |
|
Senior Member
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 |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
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/ |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
ifstream e ofstream sono più facili da usare, ad esempio non è necessario scrivere dei format string per generare dei files di testo. |
|
|
|
|
|
|
#8 |
|
Senior Member
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
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:53.




















