Dudar con archivos binarios c++

#include <iostream>
#include <fstream>

using namespace std;

main(int argc,char* argv[]){
int n[10];
for(int i=0;i<10;i++)
cin>>n[i];
int num=10;
ofstream w(argv[1], ios::out|ios::binary);
w.write(reinterpret_cast<const char*>(n),sizeof(int)*10);
}
Perdona que he copiado solo eso y creía que había copiado todo el documento, el problema es que no se porque este programa me da violación de segmento:


#include <iostream>
#include <fstream>

using namespace std;

main(int argc,char* argv[]){
    int num=10;
    ofstream w(argv[1], ios::out|ios::binary);
    w.write(reinterpret_cast<const char*>(num),sizeof(int));
}



Pero con un vector de int si funciona

#include <iostream>
#include <fstream>

using namespace std;

main(int argc,char* argv[]){
    int n[10];
    for(int i=0;i<10;i++)
        cin>>n[i];
    ofstream w(argv[1], ios::out|ios::binary);
    w.write(reinterpret_cast<const char*>(n),sizeof(int)*10);
}
Porque estás convirtiendo un int (num = 10) a un puntero. Obviamente 0xA no será una dirección válida en tu arquitectura.

- ferdy
Yo tengo entendido que para escribir archivos en binario se se utiliza write(const char*,int n);

w.write(reinterpret_cast<const char*>(num),sizeof(int));

Con esa instruccion le estoy diciendo que interprete a num como un const char*, no que lo convierta a un puntero.

Edit:joder me falta el &num

Gracias
Si, te faltaba el &.

Por otro lado, un const char* ES un puntero.

- ferdy
Gracias ferdy por la ayuda, es que estoy un poco espeso después de todo el día liado.
De todos modos, no te es más fácil utilizar operator<< ?

- ferdy
Ferdy escribió:De todos modos, no te es más fácil utilizar operator<< ?

- ferdy



Ey, ola, perdona ferdy, me interesa el tema q estais tratando...pero no llego a comprender esto ultimo q has puesto. Como q seria mas facil utilizar el operador <<?
Te importaria explicarte un pokito mas?
Gracias y un saludo
Pues utilizar
w << algo;
con las conversiones adecuadas en lugar de convertir un int* a char* lo cual es una mala idea siempre en general.

- ferdy
9 respuestas