Autor
|
Tema: |Lo que no hay que hacer en C/C++. Nivel basico| (Leído 164,575 veces)
|
Capitan ShinChan
Desconectado
Mensajes: 9
|
Una puntualización, corregidme si me equivoco.
Yo suelo programar de vez en cuando en C, sobretodo programas simples para hacer tareas rutinarias de cálculo y trabajo básico con archivo. Además de algunas cosas más complejas orientadas a sistemas operativos (los clásicos problemas de los filósofos, productor-consumidor, etc...).
Suelo usar a menudo la funcion strcpy y nunca he tenido ningún problema. Creo que antes que ir a buscar funciones alternativas, deberíamos pararnos y ver cómo podría fallar nuestro código. Con una simple sentencia if-else se pueden ahorrar muchos problemas. Es más, la mayoría de mis códigos están llenos de condicionales de este tipo para evitar por ejemplo que se produzcan sobreescrituras de memoria, comprobar que las funciones no devuelven ningún error, etc...
|
|
|
En línea
|
|
|
|
@synthesize
Wiki
Desconectado
Mensajes: 640
Another Brick in the Wall
|
Una puntualización, corregidme si me equivoco.
Yo suelo programar de vez en cuando en C, sobretodo programas simples para hacer tareas rutinarias de cálculo y trabajo básico con archivo. Además de algunas cosas más complejas orientadas a sistemas operativos (los clásicos problemas de los filósofos, productor-consumidor, etc...).
Suelo usar a menudo la funcion strcpy y nunca he tenido ningún problema. Creo que antes que ir a buscar funciones alternativas, deberíamos pararnos y ver cómo podría fallar nuestro código. Con una simple sentencia if-else se pueden ahorrar muchos problemas. Es más, la mayoría de mis códigos están llenos de condicionales de este tipo para evitar por ejemplo que se produzcan sobreescrituras de memoria, comprobar que las funciones no devuelven ningún error, etc...
Con un strncpy te ahorras estar comprobado código con if-else...
|
|
|
En línea
|
|
|
|
abelique
Desconectado
Mensajes: 3
|
gracias copañero un buen aporte solo soy un novato en c\c++ y me ha encantado la informacion aportada y la manera tan detallada de explicarlo todo De verdad gracias
|
|
|
En línea
|
|
|
|
rob1104
Desconectado
Mensajes: 340
Usuario común
|
Todo muy bien, pero solo tengo una duda.
Por ejemplo, si la función gets() es peligrosa e inestable, ¿Por qué sigue en el estandar?, ¿Solo por compatibilidad?
Saludos
|
|
« Última modificación: 10 Agosto 2010, 22:32 pm por Littlehorse »
|
En línea
|
Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.
|
|
|
Blackhawk222
Desconectado
Mensajes: 23
|
Muy bueno Estoy por empezar a programar en C++ y seguro me va a servir. Gracias Y Saludos
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
Muy bueno Estoy por empezar a programar en C++ y seguro me va a servir. Gracias Y Saludos
Entiendo que el avatar sea un chiste pero no tiene que serlo tambien su tamaño
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
Todo muy bien, pero solo tengo una duda.
Por ejemplo, si la función gets() es peligrosa e inestable, ¿Por qué sigue en el estandar?, ¿Solo por compatibilidad?
Saludos
Si, principalmente por compatibilidad con código antiguo. Muchas otras funciones son explotables (he mencionado algunas en el primer post, no todas) pero con ellas se pueden evitar errores haciendo chequeos de los datos, manejo de memoria, chequeo de limites, etc. Es decir, a pesar que no sea recomendable utilizar funciones que sean inseguras desde su base, por lo menos existe la posibilidad de solucionarlos agregando código, aunque obviamente, ese agregado de código puede generar que el programa final sea propenso a errores, por lo menos existe la posibilidad. Lo ideal siempre sera utilizar alternativas seguras, y en la medida de lo posible, que sean estándar. Por otro lado, con gets no hay nada que puedas hacer para evitar que sea explotable. Utilizarla es asegurarte como mínimo una posibilidad de desbordamiento de buffer. De hecho esta marcada como obsoleta en las ultimas revisiones de C99 y la mayoría de los entornos de trabajo conocidos emiten advertencias al utilizarla. Saludos
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
rob1104
Desconectado
Mensajes: 340
Usuario común
|
Gracias Littlehorse, nunca está de más saberlo. Aunque ahorita estoy un poco más enfocado en programación Windows en entornos RAD, es importante conocer las carencias de los lenguajes para no caer en errores básicos.
Saludos
|
|
|
En línea
|
Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.
|
|
|
someRandomCode
Desconectado
Mensajes: 250
|
Me quedé con lo de un post anterior. Deprecated significa DECREPITO, no banneado. Esas funciones están decrepitas porque otra ya indexa sus funcionalidades y ha sido favorecida por algún motivo, y como tal, el uso de la nueva y no de la decrepita esta favorecida. Y las otras que tienen poison como pragma comment van a hacer que si le pasamos al compilador (bueno, a GCC voy a dar el ejemplo) -Wall o -pedantic nos advierta o nos tire error. Lo cierto es que todavia son usables, estan bajo una capa de transición y como venimos haciendo eso con aplicaciones de 16 bits hasta Vista, podemos esperar que duren bastante mas ahi estando.
|
|
|
En línea
|
|
|
|
Merlow
Desconectado
Mensajes: 2
|
Siento revivir un poco el post pero es para agradecerte la explicacion. Como bien dices yo soy uno de esos que esta ahora en la universidad y aciertas tambien en que nos han "enseñado" a incluir la libreria conio.h
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayudaa problema nivel basico
Programación C/C++
|
krowa
|
0
|
2,133
|
13 Marzo 2012, 23:48 pm
por krowa
|
|
|
Problema con la creación de tablas SQL nivel básico.
Desarrollo Web
|
nikko88
|
2
|
2,589
|
25 Junio 2012, 17:48 pm
por nikko88
|
|
|
[Nivel 1/10] CrackMe básico C #4
« 1 2 »
Ingeniería Inversa
|
cibergolen
|
12
|
9,761
|
30 Diciembre 2012, 22:42 pm
por cibergolen
|
|
|
[C] problemas de ejecucion con un for (nivel basico, 1ro de carrera) [?]
« 1 2 3 »
Programación C/C++
|
SoyelRobert
|
20
|
12,880
|
16 Diciembre 2013, 21:24 pm
por SoyelRobert
|
|
|
[Tutorial Nivel básico] Haciendo cantar a nuestro Crackme
Ingeniería Inversa
|
fary
|
5
|
4,366
|
6 Febrero 2016, 00:03 am
por fary
|
|