|Lo que no hay que hacer en C/C++. Nivel basico|

Iniciado por Littlehorse, 12 Diciembre 2009, 18:15 PM

0 Miembros y 1 Visitante están viendo este tema.

Littlehorse

El tercer parametro de fgets es el stream desde donde vas a leer los datos. Podria ser por ejemplo un archivo de texto.

Algo asi:

FILE *ptr;
char buff[50];

ptr=fopen("archivo.txt","rt");

if(ptr!=NULL)
fgets(buff,10,ptr);/*Aqui leemos desde un archivo de texto*/
puts(buff);


Ahora, al usar stdin, los datos provienen del teclado (Standard Input).

char buff[50];
fgets(buff,10,stdin); /*Aqui se lee lo que el usuario escribe en su teclado*/
puts(buff);



http://en.wikipedia.org/wiki/Standard_streams

Un saludo
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Aberroncho

Estoy de acuerdo en todo lo dicho excepto en la parte de "string.h"

Cita de: Littlehorse en 12 Diciembre 2009, 18:15 PM

Microsoft tiene una lista de funciones baneadas (lo que en Visual Studio se conoce como deprecated) y obviamente tiene el reemplazo de estas llamandolas funcion_s. Ejemplo: strcpy_s, strcat_s, gets_s y etc.
Pueden ver las funciones catalogadas como inseguras en este header, y su reemplazo en esta lista. (Gracias Vertex por los links  :))

Tambien existen opciones como strlcpy y strlcat, las cuales pueden ver a fondo en este link.


Las funciones strcpy(), strcat(), strncpy() y strncat() pertenecen al estándar ANSI, lo que significa que están en las librerías estándar de todos los compiladores de C y funcionan igual en todas partes.

Las funciones que propones para reemplazarlas no son estándar. Las que ha implementado Microsoft es fácil que solo las encuentres en sus compiladores, y por lo que puedo leer en el enlace que has puesto, las strlcpy y strlcat no están en las librerías GNU C. Además, suponiendo que las tengas implementadas en diferentes librerías de compiladores, al no estar estandarizadas, no tienen porqué estar implementadas de la misma forma en las diferentes librerías de los diferentes compiladores por lo que su funcionalidad podría cambiarte ligeramente de un compilador a otro.

Los mayores problemas de strcpy(), strcat(), strncpy() y strncat() se dan por un mal uso de dichas funciones, osea, por errores de programación. Considero que es mejor aprender a utilizarlas adecuadamente y tener cuidado en su manejo que sustituirlas por funciones no estándar.
"La ignorancia es la noche de la mente, pero una noche sin Luna ni estrellas."
(Confucio)

Littlehorse

Si obviamente, tenes razón. Por eso en el párrafo anterior expuse que strnxxx se pueden utilizar perfectamente mientras se tomen en cuenta las contras que estas tienen. El resto son solo mas opciones.

Un saludo!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

RockAqp

una pregunta
no se muxo de c++
pero si no pones el system pause
en un bucle x ejemplo menu
se borra y no sale la respuesta
y tu tambien pusiste que no se deve usar el getch
tons que uso para que no se borre el resultado...
:S

Littlehorse

cin.get(); en C++, puedes hacer un ignore antes para ignorar lo que te haya quedado en el buffer. getchar en C, o puedes hacer un fgets para evitar el buffer sobrante. Podrás encontrar muchas formas para hacer una pausa, si se recomienda no utilizar getch es porque proviene de una librería no estándar.
En el foro tienes muchos ejemplos y muchos hilos respecto al tema.

Saludos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

LeGNa29A

Considero que con textos como este y (junto con las opiniones que se han dado) es realmente como podemos mejorar.
Muy buen aporte, felicidades!
"Sólo en la medida en que nos exponemos a la aniquilación una y otra vez, encontramos aquello que nos hace verdaderamente indestructibles."
(Pema Chödrön)

doripunk15

Hola!!!

Oye me dejaste con la intriga del scanf() =s.

Tu que dominas mas de C que funcion es buena para poder obtener numeros??? ya que el scanf() deja basura

Saludos y me gusto mucho tu tutorial

-Ramc-

Cita de: doripunk15 en 26 Abril 2010, 04:10 AM
Hola!!!

Oye me dejaste con la intriga del scanf() =s.

Tu que dominas mas de C que funcion es buena para poder obtener numeros??? ya que el scanf() deja basura

Saludos y me gusto mucho tu tutorial
Puedes usar lo que quieras para leer, excepto gets, la cosa es que limpies el buffer después, sería mejor que en vez de scanf uses, fgets + sscanf.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Eternal Idol

Cita de: -Ramc- en 26 Abril 2010, 16:18 PMPuedes usar lo que quieras para leer, excepto gets, la cosa es que limpies el buffer después, sería mejor que en vez de scanf uses, fgets + sscanf.

Exacto, fgets y sscanf es lo ideal, no tenes que preocuparte por ningun buffer.
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

doripunk15

Ok entonces usare estas funciones y las probare con el metodo antes descrito en el "tutorial"

Gracias por la respuesta y saludos!!!!