elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda c++  (Leído 2,070 veces)
ankora45

Desconectado Desconectado

Mensajes: 52



Ver Perfil
duda c++
« en: 10 Octubre 2012, 20:43 pm »

no se como hacer para que si un int te retorne char te devuelva un error en vez de un buffer overflow
esto es lo que tengo ya se que os puede parecer una aberracion pero no se me ocurre otra cosa
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int num;
  8.    cout<<"escribe un numero"<<endl;
  9.    cin>>num;
  10.    if (num return char)
  11.    {
  12.        cout<<"no ha escrito un numero"<<endl;
  13.    }
  14.    else
  15.    {
  16.        cout<<num<<endl;
  17.    }
  18. }
  19.  


En línea

Hay dos cosas infinitas en este mundo, el universo y la estupidez humana, y de la primera no estoy muy seguro
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: duda c++
« Respuesta #1 en: 10 Octubre 2012, 21:50 pm »

no se como hacer para que si un int te retorne char te devuelva un error en vez de un buffer overflow
esto es lo que tengo ya se que os puede parecer una aberracion pero no se me ocurre otra cosa
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int num;
  8.    cout<<"escribe un numero"<<endl;
  9.    cin>>num;
  10.    if (num return char)
  11.    {
  12.        cout<<"no ha escrito un numero"<<endl;
  13.    }
  14.    else
  15.    {
  16.        cout<<num<<endl;
  17.    }
  18. }
  19.  

estas guardando la entrada en un int y luego ese int lo queres convertir en char?
porque no haces un casting?

char a = (char)num;

el compilador segurmante te lanzara un warning de perdida de datos y es normal , pero si estas seguro que solo ingresara un byte, noseria mejor pasar directamente el char? pero si es un numero de mas de 2 cifras entonces tendras que convertir el numero y
copiarlo en un buffer, osea convertir cada cifra del numero a un char en C++.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: duda c++
« Respuesta #2 en: 11 Octubre 2012, 03:15 am »

no se como hacer para que si un int te retorne char te devuelva un error en vez de un buffer overflow
Tienes que explicarte de una forma clara y precisa porque, honestamente, es difícil entender el problema.

Supongo la pregunta es: Si en un programa espero obtener un entero y en su lugar el usuario teclea una cadena no valida como "JKL", ¿Como puede detectarlo y continuar con la ejecución del programa?

Si es eso puedes primero leer una linea mediante la función "getline" y a continuación verificar si de esta se puede obtener el numero mediante un objeto de la clase "stringstream".

Un ejemplo:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <string>
  7. using std::string;
  8.  
  9. #include <sstream>
  10. using std::stringstream;
  11.  
  12. int main()
  13. {
  14.   bool ok;
  15.  
  16.   do {
  17.      cout << "Introduce un numero:" << endl;
  18.      string linea;
  19.      getline (cin, linea);
  20.  
  21.      stringstream aux;
  22.      aux << linea;
  23.  
  24.      int numero;
  25.      if (aux >> numero) {
  26.         cout << "El numero es " << numero << endl;
  27.         ok = true;
  28.      } else
  29.         ok = false;
  30.   } while (!ok);
  31.  
  32.   return 0;
  33. }

Editado: la explicacion estaba mal (muy mal). La cambie por una, espero, mejor.

Un saludo
« Última modificación: 11 Octubre 2012, 16:30 pm por rir3760 » En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: duda c++
« Respuesta #3 en: 11 Octubre 2012, 16:27 pm »

Mensaje duplicado (Fue un "error de dedazo").
« Última modificación: 11 Octubre 2012, 16:32 pm por rir3760 » En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 10,231 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
Duda duda y duda de Metasploit
Bugs y Exploits
huber_nomas 4 6,099 Último mensaje 17 Febrero 2012, 14:00 pm
por MauroMasciar
Duda
Programación C/C++
djdac3 3 2,143 Último mensaje 16 Septiembre 2012, 03:08 am
por avesudra
DUda c++
Programación C/C++
Stakewinner00 4 2,793 Último mensaje 18 Septiembre 2012, 15:09 pm
por Stakewinner00
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines