[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [POSIBLE OT]Re: Tengo problemas programando en c y no se si el problema es el compilador , bibliotecas ....etc...



On Thu, 17 Mar 2005 17:53:42 +0100, saegen@gmail.com <saegen@gmail.com> wrote:
> 
> 
> Hola ,lo que me esta pasando creo que no es debido a
> un problema de programacion, si lo fuera ¿porque mis
> codigos funcionan en windows (dev++ ) pero no en linux?. No soy ningun
> guru de linux pero este problema, o esta en alguna configuracion que hago mal
> o es que algo no anda bien. Llevo solo unos meses volcado en linux, que opinas
> sobre  los codigos y
> resultados de mas abajo, y ante todo gracias.

Bueno, ¿qué significa exactamente que funciona? ¿que compila sin
error? ¿Que se ejecuta aunque no hace lo que quieres? ¿Funciona como
quieres?

En ambos códigos que he visto estás escribiendo datos a direcciones no
controladas. Es como disparar cañonazos por encima de un muro. Puede
que en windows no des a nada y por eso siga ejecutandose y en cambio
en linux das rápidamente a algo y se queja.

Algún ejemplo: char comprovar="A";

char asigna un byte de memoria para la variable «comprovar» pero "A"
llena 2 bytes de memoria: el primer byte es '2' y el segundo es '\0'
en este caso, como no se definen muchas más variables el riesgo de
dañar el programa es bajo. Aunque claramente es un error de
programación. (otro error es usar «comprovar» como nombre de variable,
más correcto sería usar «comprobar» ;-)

Para imprimir cadenas de texto tiene dos métodos: printf("%s",cadena)
o printf("%s",&cadena[0]), el primer sistema es más simple para el
común de los mortales ;-)

Bueno, con esto de aprender a programar hay que tener mucho sentido
del humor porque la cosa es dura. Mis consejos:

- Olvidate del Kerningan Richie para aprender a programar C. Es un
libro muy antiguo, depende de la versión que encuentres puede ser
incluso anterior a la estandarización de C. Además es muy poco
didactico. En el mismo paquete te incluyo los libros de H. Schildt

- C da mucha flexibilidad para meter la pata con él. Es muy importante
saber como se asigna la variables y los punteros. Y lo mejor que yo he
encontrado para eso es dominar el uso de un debugger. Durante un
tiempo usé DDD que es muy fácil de usar y en módo gráfico. (tienes que
dar a gcc la opción de información para debugger). Ahí puedes ejecutar
paso a paso y ver si en las variables se carga la información que
realmente debería de cargarse.

- Hay alguna utilidad más de gestión de memoria como Valgrind que
permite detectar algunos errores de punteros descontrolados. Aunque
quizás esto sea algo avanzado. Yo no lo he usado nunca.

- Por último, depende de para que quieras C, pero yo encuentro por lo
general más efectivo y gratificante usar lenguajes de programación de
script: Perl Python, Ruby, ... para hacer las pequeñas utilidades que
necesito dia a día.

atte. javier m mora

En el código que has puesto hay muchos detalles a comentar, como que
está desaconsejado el uso de scanf y similares, pero creo que lo de
arriba era lo más importante.

Ah, aunque es posible usar expresiones del tipo
printf("%c",getchar()); esta expresión te da muy poco control sobre lo
que devuelve getchar(); es más lógico crear una variable para
controlar que devuelve getchar() (y así poder examinar si es apropiada
con el debugger).



Reply to: