View Full Version : [C++]Fwrite
Buongiorno,ho bisogno di un aiuto:D
Come al solito credo che sia una cosa facile,comunque.......il problema è questo: io ho fatto un programmino molto semplice giusto per capire come funziona fwrite(),fopen() ecc....questo programma permette di scrivere un testo,che poi va a salvarsi su un file di testo.Fin qui tutto bene e 0 errori.Il problema e che quando il programma va a salvare quello che ho scritto mi salva cose tutte strane:muro:
Piccolo esempio:
Ho provato a scrivere hello e lui sul file di testo mi è andato a salvare %>:confused: qualcuno sa come risolvere?:D
qui c è il codice del programma
include <iostream>
#include <stdio.h>
using namespace std;
int main ()
{
FILE *File;
string voce;
cin >> voce;
string buffer[] = {voce};
File = fopen ("File.txt" , "wb");
fwrite(buffer , 1 , sizeof(buffer) , File );
fclose(File);
}
DanieleC88
29-01-2009, 15:17
Le funzioni che stai usando sono funzioni della libreria standard del C, che quindi conoscono come unico tipo "stringa" un puntatore ad una memoria in cui inizia una sequenza di byte che contiene la stringa. Quelle funzioni non conoscono la classe "std::string". ;)
Usa il metodo c_str() della classe std::string per avere l'equivalente stringa C.
ho provato a modificare il buffer in
string buffer[1][30] = {voce};
Ma ora mi stampa sul file di testo
┌>ㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜDㅜD
Mi sa che devo ridarmi una ripassatina è da parecchio che non mi rimettevo all opera e gli array non è che me li ricordo un granchè:doh: non è che mi puoi ricordare tu come si dichiara un array string?:D
grazie daniele ora provo con il tuo metodo;)
Mi sa che devo ridarmi una ripassatina è da parecchio che non mi rimettevo all opera e gli array non è che me li ricordo un granchè:doh: non è che mi puoi ricordare tu come si dichiara un array string?:D
Non ho capito se vuoi un array di string o una string :confused:
ho modificato il codice in questa maniera
#include <iostream>
#include <string>
using namespace std;
int main ()
{
FILE *File;
string voce;
cin >> voce;
string buffer[1][30] = {voce};
File = fopen ("File.txt" , "wt");
const string *c_str(voce , 1 , sizeof(voce) , File);
fclose(File);
}
Ma al momento della compilazione mi da sempre questo errore
||In function `int main()':|
|15|error: initializer expression list treated as compound expression|
|15|error: cannot convert `FILE*' to `const std::string*' in initialization|
||=== Build finished: 2 errors, 0 warnings ===|
DanieleC88
29-01-2009, 19:17
const string *c_str(voce , 1 , sizeof(voce) , File);
Cosa volevi fare qui? :D
Ti faccio un esempio:
std::string stringaDiProva = "Hello, World!";
const char *sonoUnaStringaC;
sonoUnaStringaC = stringaDiProva.c_str();
printf("Contenuto: \"%s\"\n", sonoUnaStringaC);
Non ho capito se vuoi un array di string o una string :confused:
Ribadisco....
Scusa se non ti ho risposto,comunque volevo dire un array di string:D
Cosa volevi fare qui?:D
In effetti di sta funzione non ci ho capito na mazza di come funziona(che bel gioco di parole:D )Comunque ora vedo il tuo esempio e cerco di capirci qualcosa:D
sarò io un po come dire.....abbuo ci siamo capiti:D
Comunque non ho capito bene come far salvare il contenuto della variabile sul file di testo:D
OK sono riuscito a usare c_str solo che mi fa stampare sul file di testo massimo 4 caratteri per variabile,come posso risolvere?:D
DanieleC88
01-02-2009, 20:17
Come la stai usando? Così?
fwrite(stringa.c_str(), 1, sizeof(stringa), fp);
In tal caso è normale, io direi:
fwrite(stringa.c_str(), stringa.length(), sizeof(char), fp);
si lo stavo usando proprio come hai detto tu nel primo codice,ora provo a modificare
Ma usa i file del C++ e non quelli del C.
http://www.cplusplus.com/reference/iostream/ofstream/open.html
Dopo lo puoi usare allo stesso modo di cout.
Ma usa i file del C++ e non quelli del C.
http://www.cplusplus.com/reference/iostream/ofstream/open.html
Dopo lo puoi usare allo stesso modo di cout.
Grazie cionci sono riuscito a farlo funzionare non sapevo nemmeno che esistesse questa funzione:D
A quanto pare non ho risolto:D Scusate se vi secco ancora ma ho provato in più modi ma niente........in poche parole quando devo far stampare un solo nome e un solo numero funziona......quando si tratta gia di metterne due mi stampa solo il primo......qui di sotto c è il codice
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
string n[14];
string m[14];
void voce1() {
ofstream Rubrica;
Rubrica.open("Rubrica.txt");
cout << "Inserire il nome del contatto\n";
cin >> n[1];
Rubrica << "Nome \n\n";
Rubrica << n[1] << "\n\n";
cout << "Ora inserire il numero\n";
Rubrica << "Numero \n\n";
cin >> m[1];
Rubrica << m[1];
Rubrica.close();
}
string selezione[14];
int main()
{
ofstream Rubrica;
Rubrica.open("Rubrica.txt");
cout << "Inserire il nome del contatto\n";
cin >> n[0];
Rubrica << "Nome \n\n";
Rubrica << n[0] << "\n\n";
cout << "Ora inserire il numero\n";
Rubrica << "Numero \n\n";
cin >> m[0];
Rubrica << m[0];
cout << "Continuare?\n";
cin >> selezione[0];
if(selezione[0] == "si") {
voce1();
void voce1();
}
}
Prometto che la finisco di rompervi le balle:sofico: :D
Non ci sono for...ogni volta apri e chiudi il file, è chiaro che ogni volta che apri il file ti prenderà solo il primo.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.