elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:30  


Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  |Lo que no hay que hacer en C/C++. Nivel basico|
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 3 [4] Ir Abajo Respuesta Imprimir
Autor Tema: |Lo que no hay que hacer en C/C++. Nivel basico|  (Leído 31,784 veces)
[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.065


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: |Lo que no hay que hacer en C/C++. Nivel basico|
« Respuesta #45 en: 28 Marzo 2011, 16:24 »

¿Alguna razon para no usar un buffer de entrada de por ejemplo 120 caracteres? fgets no deja basura, a lo sumo no lee mas de lo permitido pero no es lo mismo.

Bueno, pues preferiría evitar que haga eso. Si meto un buffer de 300 bytes pues al usuario no se le va a ocurrir introducir más, y si lo hace es normal que el programa no funcione correctamente, pero si se puede evitar mejor.

Saludos


En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.710


Nie Dam Sie


Ver Perfil WWW
Re: |Lo que no hay que hacer en C/C++. Nivel basico|
« Respuesta #46 en: 28 Marzo 2011, 19:08 »

Mas allá de la seguridad de fgets, también es mas estable dado que su comportamiento es predecible. Para lograr lo mismo con scanf hay que jugar bastante con los parámetros, y a la larga queda poco agradable a la vista y un tanto confuso.

No hay nada en C para descartar caracteres (como si lo hay en C++) por lo que si se trata de mantener el estándar la mejor alternativa es hacer una función con el primer código que pusiste y llamarla cuando corresponda -pero cuidado, chequear \n pero también EOF-

Si realmente necesitas mas flexibilidad entonces no te queda alternativa mas que utilizar funciones especificas del sistema ya sea para limpiar el buffer o para modificar el modo de I/O.

Saludos!



En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.065


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: |Lo que no hay que hacer en C/C++. Nivel basico|
« Respuesta #47 en: 29 Marzo 2011, 15:38 »

Gracias, era lo que quería saber, ya no hay duda  ;D.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Maurice_Lupin

Desconectado Desconectado

Mensajes: 110


GPS


Ver Perfil
Re: |Lo que no hay que hacer en C/C++. Nivel basico|
« Respuesta #48 en: 14 Mayo 2011, 05:55 »

Soy nuevo en el foro, asi que si me equivoco me lo hacen saber =) . No sabia si crear un nuevo tema, en fin. Aqui comparto unas funciones que hace tiempito hice para leer en consola, intente limitar los caracteres, si tienen sugerencias se los agradeceria. Por cierto hay alguna función estandar que haga lo mismo que getch(); para no usar la libreria conio.h, este código lo compile con Dev C++ 4.9

libreria.h
Código
#include<conio.h>
// esta función lee caracteres limitando la cantidad de estos
void ygets(char *c, register int n)
 {register char car;
  register int t;  
  for(t=0; t<n ;) //lee hasta el maximo de caracteres
     {car=getch(); // caracter por caracter
      switch(car)
        {// si presionaste enter, ingresa caracter nulo
         // y termina el bucle
         case '\r': c[t]='\0' ;return;
         // si presionaste delete, retrocede, imprime espacio
         // y vuelve a retroceder, da la impresión que no
         // presionaste nada =)
         case '\b': if(t>0) {t-- ;printf("\b \b");};
         break;
         // muestra lo demas y almacena en nuestra variable
         default: putchar(car); c[t]=car; t++;
        }  
     }
  c[n]='\0';  
 }
 
// casi lo mismo quet ygets(), pero sólo
// admite numeros en el switch
void LeerN(char *c, int n)
 {register char car;
  register int t;
  for(t=0;t<n;)
     {car=getch();
      switch(car)
        {case '\r': c[t]='\0' ;return;
         case '\b': if(t>0) {t-- ;printf("\b \b");}; break;
         case '0':case '1':case '2':case '3':case '4':case '5':
         case '6':case '7':case '8':case '9':
              c[t]=car;putchar(car);t++;break;            
         default: break;
        }  
     }
  c[n]='\0';  
 }
 
// para leer los passwords hace lo mismo que ygets()
// pero muestra "*" en lugar de caracteres o.0!
void leerPass(char *c, int n)
 {register char car;
  register int t;
  for(t=0;t<n;)
     {car=getch();
      switch(car)
        {case '\r': c[t]='\0' ;return;
         case '\b': if(t>0) {t-- ;printf("\b \b");}; break;
         default: {putchar('*');
                  c[t]=car; t++;}
        }
     }
  c[n]='\0';  
 }
 
 

Código
#include <stdio.h>
#include <iostream>
#include "libreria.h"
 
 
int main(int argc, char *argv[])
{   char t[15];  
 
   printf("Max 9 digitos \n");
   printf("Solo numeros: "); LeerN(t,9);    
   printf("\nnum: "); printf("%s \n",t);
   //-----------------------
   printf("\nMax 9 caracteres");    
   printf("\nCualquier caracter: "); ygets(t,9);
   printf("\nCadena: "); printf("%s \n",t);    
   //------------------------
   printf("\nMax 5 caracteres");
   printf("\nLee Pass: "); leerPass(t,5);
   printf("\nIngreso: "); printf("%s",t);    
   getch();
   return EXIT_SUCCESS;
}
 
« Última modificación: 10 Junio 2011, 08:30 por Maurice_Lupin » En línea
gowend

Desconectado Desconectado

Mensajes: 19



Ver Perfil
Re: |Lo que no hay que hacer en C/C++. Nivel basico|
« Respuesta #49 en: 20 Agosto 2011, 17:59 »

Veo que tengo que aprender mucho aun  ;-)
En línea

GwCR
Lev3rag3

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Re: |Lo que no hay que hacer en C/C++. Nivel basico|
« Respuesta #50 en: 22 Agosto 2011, 19:40 »

Gracias por esta informacion amigo me sirvio de mucho
En línea
Y2J

Desconectado Desconectado

Mensajes: 10



Ver Perfil
Re: |Lo que no hay que hacer en C/C++. Nivel basico|
« Respuesta #51 en: 24 Agosto 2011, 02:53 »

Vaya, al parecer tengo buenos habitos de programacion;
En línea
skatres

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: |Lo que no hay que hacer en C/C++. Nivel basico|
« Respuesta #52 en: 10 Noviembre 2011, 20:26 »

Gracias por los consejos publicados, sin embargo no entiendo como en las universidades , incitan al uso de funciones como <conio.h> o system("pause")
En línea
Shamaroot

Desconectado Desconectado

Mensajes: 56


El conocimiento es libre.


Ver Perfil
Re: |Lo que no hay que hacer en C/C++. Nivel basico|
« Respuesta #53 en: 28 Noviembre 2011, 04:13 »

Gracias, me servira de bastante :)

Saludos !!
En línea

El conocimiento es libre.
Hackmundy

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: |Lo que no hay que hacer en C/C++. Nivel basico|
« Respuesta #54 en: 25 Diciembre 2011, 07:45 »

Wua tremendo aporte yo que estoy aprendiendo c++ gracias me es muy util te lo agradezco..
Leyendo.....

Saludos..
En línea

Un hacker Sabe de La materia
Un Lamer Cree Saberlo
Y yo solo aprendo.

Para seguir la trayectoria: mira al maestro, sigue al maestro, camina junto con el maestro, mira a través del maestro, conviértete en el maestro.
Páginas: 1 2 3 [4] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda en C nivel básico.
Programación C/C++
Jukuqs 5 867 Último mensaje 26 Abril 2008, 14:56
por Jukuqs
Graficos Nivel Basico [Ayuda]
Programación C/C++
ignorantev1.1 12 2,569 Último mensaje 20 Marzo 2010, 23:00
por Leo Gutiérrez.
Necesito ayuda matemática "nivel básico"
Dudas Generales
Dr.Hacker++ 12 2,537 Último mensaje 18 Enero 2011, 20:08
por Garfield07
Van a hacer curso de hacker basico?
Dudas Generales
Pafate 3 2,458 Último mensaje 14 Febrero 2011, 18:32
por Garfield07
Ayudaa problema nivel basico
Programación C/C++
krowa 0 146 Último mensaje 13 Marzo 2012, 23:48
por krowa
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines