[C con Clase] Ayuda con Punteros y Arrays

Steven Davidson steven en conclase.net
Dom Ene 21 06:16:57 CET 2007


Hola David,

El pasado 2007-01-21 04:56:21, David Reza escribió:

DR> Si he leído el capítulo, sólo que no entiendo.
DR> El valor que regresa 'strcmp()' cuando las dos cadenas son iguales es 0, es
DR> decir, falso. Estoy en lo correcto?

Bueno, lo de "falso", es subjetivo. Desde el punto de vista de la función, se retorna 0 (cero). Ahora bien, si comprobamos tal valor directamente, en una expresión condicional, entonces sí, 0 (cero) indica "falso".

DR> Entonces su negativa sería el hecho de que sea verdadero.

Correcto.

DR> if( !strcmp(j, k) ) Estamos diciéndole a la computadora que: Si el resultado
DR> de la comparación entre j y k es verdadero ( que las cadenas son
DR> diferentes), que ejecute la instrucción(es) siguiente(s) después del If ?
DR> Esto es lo que me confunde ya que sé que no es así, pero no le encuentro
DR> otra manera. Tal vez si me lo dijeran con palabras y no con códigos.

Si las cadenas, 'j' y 'k', son iguales, entonces 'strcmp()' retorna 0 (cero). Como el valor retornado es usado en una expresión condicional, entonces 0 es interpretado como "falso". Sin embargo, esto no es lo que queremos, ya que nos interesa comprobar cuando sea 0 (cero), pero 'if' interpreta "falso" de una forma diferente a la que queremos. Por lo tanto, para forzar la expresión condicional de 'if' a que sea "verdadero", usamos el operador !.

Si aún no lo tienes claro, entonces sugiero crear una tabla de la verdad, para que compruebes el comportamiento de las expresiones.


Espero haber aclarado la duda.

Steven


Más información sobre la lista de distribución Cconclase