:P
#include <iostream>
#include <string>
#include <cstring>
#include <fstream>
using namespace std;
void ayuda()
{
cout << "formato: cifrar.exe parametro \"archivo a cifrar\" \"archivo cifrado\"" << endl;
cout << "parametros:"<< endl << "-c cifrar" << endl << "-d descifrar" << endl;
}
int main(int argc,char *argv[])
{
if(argc==4)
{
char *buf;
int tamano;
int n=1;
char letra;
ifstream archivo(argv[2],ios::binary);
if(archivo.fail())
{
cout << "no fue posible abrir el archivo"<< endl;
return 1;
}
//-----------------------------
archivo.seekg(0,ios::end);
tamano=archivo.tellg(); //encuentro el tamano del archivo
archivo.seekg(0,ios::beg);
buf=new char[tamano];
//-----------------------------
archivo.read(buf,tamano);
archivo.close();
ofstream salida(argv[3],ios::binary);
for(int xd=0;xd<tamano;xd++)
{
if(strcmp(argv[1],"-c")==0)
{
letra=buf[xd]+n;
}
else if(strcmp(argv[1],"-d")==0)
{
letra=buf[xd]-n;
}
else
{
cout << "parametros erroneos"<<endl;
return 1;
}
salida << letra;
if(n>10)
{
n=1;
}
n++;
}
salida.close();
delete [] buf;
return 0;
}
else
{
ayuda();
}
return 0;
}
Con qué estándar y/o compilador te compila esto? :
char buf[tamano];
Sé que en C99 se puede, pero no creo recordar que se pudiera en C++.
En todo caso, un array estático es normalmente ubicado en la stack. Si tratas de cifrar un archivo de algunos MB, se te puede desbordar la stack y crashear el programa.
Saludos.
Cita de: 0xDani en 10 Junio 2013, 21:30 PM
Con qué estándar y/o compilador te compila esto? :
char buf[tamano];
Sé que en C99 se puede, pero no creo recordar que se pudiera en C++.
En todo caso, un array estático es normalmente ubicado en la stack. Si tratas de cifrar un archivo de algunos MB, se te puede desbordar la stack y crashear el programa.
Saludos.
tienes razon me lo compilo el gcc en codeblocks con windows .
lo hice rapido casi con afan :P luego lo corrijo
Cita de: 0xDani en 10 Junio 2013, 21:30 PM
Con qué estándar y/o compilador te compila esto? :
char buf[tamano];
Sé que en C99 se puede, pero no creo recordar que se pudiera en C++.
En todo caso, un array estático es normalmente ubicado en la stack. Si tratas de cifrar un archivo de algunos MB, se te puede desbordar la stack y crashear el programa.
C++ no lo tiene recogido en el estándar, pero tampoco lo prohíbe.
Con el Mingw (o g++) te lo compila sin problemas, sin warnings ni nada.
ya correji el programa ahora uso memoria dinamica y es completamente estandar