Cómo verificar nulo en C: 7 pasos (con imágenes)

Tabla de contenido:

Cómo verificar nulo en C: 7 pasos (con imágenes)
Cómo verificar nulo en C: 7 pasos (con imágenes)

Video: Cómo verificar nulo en C: 7 pasos (con imágenes)

Video: Cómo verificar nulo en C: 7 pasos (con imágenes)
Video: Te enseño a usar GIMP en 26 minutos (edición de imágenes) 2024, Mayo
Anonim

En C, NULL es una constante simbólica que siempre apunta a un punto inexistente en la memoria. Aunque muchos programadores lo tratan como igual a 0, esta es una simplificación que puede hacerle tropezar más adelante. Es mejor verificar sus punteros con NULL directamente y usar 0 en otros contextos. Esto mantiene su código limpio y fácil de entender, ya que sabrá que está trabajando con punteros cada vez que vea NULL.

Pasos

Parte 1 de 2: Realización de una verificación nula

Marque Null en C Paso 1
Marque Null en C Paso 1

Paso 1. Utilice el código de verificación nulo estándar

La siguiente es la forma más obvia de escribir un cheque nulo. Usaremos ptr en este artículo como el nombre del puntero que está comprobando.

  • si (ptr == NULL)

    {

    // codifica si el puntero es NULL

    } demás {

    // codifica si no es NULL

    }

Marque Null en C Paso 2
Marque Null en C Paso 2

Paso 2. Pruebe cualquier valor que no sea NULL

A veces es más conveniente probar la desigualdad. Aquí no hay sorpresas:

  • if (ptr! = NULL) {

    // codifica si no es NULL

    }

Marque Null en C Paso 3
Marque Null en C Paso 3

Paso 3. Escriba el NULL primero para evitar errores (opcional)

La principal desventaja del método PTR == NULL es la posibilidad de que accidentalmente escriba ptr = NULL en su lugar, asignando el valor NULL a ese puntero. Esto puede causar un gran dolor de cabeza. Dado que la prueba de (in) igualdad trata los operandos simétricamente, puede obtener exactamente el mismo resultado escribiendo si (NULL == ptr) en lugar de. Esto es más resistente a errores tipográficos, ya que un NULL = ptr accidental crea un error de compilación simple.

Esto parece un poco incómodo para algunos programadores, pero es perfectamente válido. El enfoque que utilice solo depende de las preferencias personales y de lo bueno que sea su compilador para detectar el error if (ptr = NULL)

Marque Null en C Paso 4
Marque Null en C Paso 4

Paso 4. Pruebe si la variable es verdadera

Un simple si (ptr) prueba si ptr es VERDADERO. Devolverá FALSE si ptr es NULL, o si ptr es 0. La distinción no importa en muchos casos, pero tenga en cuenta que no son idénticas en todas las arquitecturas.

El reverso de esto es si (! ptr), que devolverá TRUE si ptr es FALSE.

Parte 2 de 2: Evitar errores

Marque Null en C Paso 5
Marque Null en C Paso 5

Paso 1. Establezca un puntero antes de verificar NULL

Un error común es asumir que un puntero recién creado tiene un valor NULL. Esto no es verdad. Un puntero no asignado sigue apuntando a una dirección de memoria, pero no a una que haya especificado. Es una práctica común establecer punteros recién creados o liberados en NULL para asegurarse de que no use esta dirección inútil por accidente.

  • Evite este error:

    char * ptr;

    si (ptr == NULL)

    {

    // Esto devolverá FALSE. Al puntero se le ha asignado un valor válido.

    }

  • En su lugar, escribe:

    char * ptr = NULL; // Esto asigna el puntero a NULL

    si (ptr == NULL)

    {

    // Esto devolverá TRUE si el puntero no ha sido reasignado.

    }

Marque Null en C Paso 6
Marque Null en C Paso 6

Paso 2. Preste atención a las funciones que podrían devolver NULL

Si una función puede devolver NULL, piense si esto es una posibilidad y si eso causaría problemas más adelante en su código. Aquí hay un ejemplo de la función malloc usando la verificación nula (si (ptr)) para asegurarse de que solo maneja punteros con valores válidos:

  • int * ptr = malloc (N * tamaño de (int));

    if (ptr) {

    int i;

    para (i = 0; i <N; ++ i)

    ptr = i;

    }

Marque Null en C Paso 7
Marque Null en C Paso 7

Paso 3. Comprenda que NULL es 0, pero siempre debe usar NULL en lugar de 0 cuando trabaje con punteros para mayor claridad

Históricamente, C representaba NULL como el número 0 (es decir, 0x00). Hoy en día puede volverse un poco más complicado y varía según el sistema operativo. Por lo general, puede verificar NULL usando ptr == 0, pero hay casos extremos en los que esto puede causar un problema. Quizás lo más importante es que el uso de NULL hace que sea obvio que está trabajando con punteros para otras personas que leen su código.

Consejos

Puede usar este registro while como cualquier otro: while (NULL == ptr) {

Recomendado: