On Thu, 17 Mar 2005 17:53:42 +0100, [EMAIL PROTECTED] <[EMAIL PROTECTED]> 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).