CUESTIÓN
Cuando ejecuto un programa con la siguiente línea:
if (argc=!2 || atoi(argv[1])<0 || atoi(argv[2])<=0)
{
...
}
en su función main
, me sale una ventana
indicando una violación de acceso a memoria cuando
no meto dos argumentos por la línea de órdenes. ¿Por
qué?
SOLUCIÓN
Hay errores de sintaxis que no son tales. En esta línea, en concreto,
en el primer término de la condición del if
, ha habido
un error de mecanografía y se ha puesto argc=!2
en lugar
de argc!=2
y el compilador no lo detecta, porque resulta
una orden con sentido en C.
Cuando el compilador llega a argc=!2
, toma el 2 y calcula
!2
. Como 2 es verdadero (distinto de cero), !2
es verdadero (o sea, cero). A continuación, hace argc=0
,
es decir, asigna cero a argc
. Finalmente el resultado de
una asignación en C, vista como función, es el número asignado, por
lo que el primer término del if
es cero (falso).
A continuación, se evalúa el segundo término y al evaluar
argv[1]
, se produce la infracción de acceso a memoria.
© 2000 Guillermo González Talaván.