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).

Responder a