¿Cómo puedo comprobar si char* variable apunta a la cadena vacía?

¿Cómo puedo comprobar si char* variable apunta a una cadena vacía?

InformationsquelleAutor Aan | 2011-11-01

7 Kommentare

  1. 85

    Comprobar si el primer carácter es ‘\0’. Probablemente deberías comprobar si el puntero es NULL.

    char *c = "";
    if ((c != NULL) && (c[0] == '\0')) {
       printf("c is empty\n");
    }

    Podría poner tanto de los cheques en una función para hacer que sea conveniente y fácil de reutilizar.

    Editar:
    En la declaración si se puede leer como este, «Si c no es cero y el primer carácter de la matriz de caracteres ‘c’ no es ‘\0’ o cero, entonces…».

    La && simplemente combina las dos condiciones. Es básicamente como decir esto:

    if (c != NULL) { /* AND (or &&) */
        if (c[0] == '\0') {
            printf("c is empty\n");
        }
    }

    Es posible que desee obtener un buen libro de programación en C, si no que es claro para usted. Me podrían recomendar un libro llamado «El Lenguaje de Programación C».

    El menor de la versión equivalente a la anterior sería:

    if (c && !c[0]) {
      printf("c is empty\n");
    }
    • Lo c && c[0] significa? Puede usted explicar por favor?
    • Voy a editar la respuesta.
    • Personalmente me hubiera separado el cheque por un puntero NULO a partir de la comprobación de una cadena vacía; los dos no están relacionados. «más portátil» probablemente no es realmente lo que estaban tratando de decir, ya que todo el código que presentamos a continuación es válida C (y C++).
    • Escrito c != NULL en lugar de sólo c consigue sonó si yo estoy revisando el código, porque los dos son exactamente los mismos (siempre y cuando c es un puntero) y la más corta es el estándar de C modismo. Nonidiomatic formas sólo debe ser utilizado cuando se desea dibujar un humano atención del lector a algo raro, pero no hay nada raro aquí, así que, el lenguaje es el preferido.
    • Uno de los personajes más corta que su «versión más corta» sería if (c && !*c).
  2. 10

    Mi método preferido:

    if (*ptr == 0) //empty string

    Probablemente más común:

    if (strlen(ptr) == 0) //empty string
    • Tenga en cuenta que el segundo, «más común» posibilidad es innecesariamente más lento.
    • la lentitud no suele materia y strlen será más fácil de entender si no estás acostumbrado a la primera forma.
    • Gracias Marcos Rescate.
    • en este sitio la mejor manera de agradecer a alguien es para golpear el uparrow junto a la respuesta 🙂
    • Usted me preguntó nada ja! 🙂 tomar +1.
    • Muy buen tip
    • Lo que si ptr es null?
    • la pregunta pedí específicamente que «apunta a una cadena vacía», así que esa es la pregunta que me respondió; un puntero nulo es una cosa completamente diferente. Se puede combinar una prueba null con los demás, me dio por encima, y si la pones primero el cortocircuito y reglas que le impiden eliminar el puntero null. if (ptr == nullptr || *ptr == 0)

  3. 9

    Comprobar el puntero para NULL y, a continuación, utilizando strlen a ver si devuelve 0.

    NULL es importante ya que pasar NULL puntero a strlen invoca una un Comportamiento Indefinido.

  4. 2

    Yo prefiero utilizar la función strlen como biblioteca de funciones se llevan a cabo de la mejor manera.

    Así, me gustaría escribir
    if(strlen(p)==0) //cadena Vacía

    • Gran idea, permite iterar a través de toda la cadena (que, por todo lo que sabemos, podría ser de 2 gb de tamaño) para averiguar si contiene al menos un carácter! </sarcasmo>
    • Me disculpo.. tienes razón..
    • He encontrado strlen causa de un accidente si el char* es NULO…
    • mientras la derecha no es necesario ser un imbécil al respecto.
  5. 1

    Darle una oportunidad:

    Tratar de conseguir la cadena a través de la función gets(cadena)
    a continuación, compruebe el estado como si(string[0] == ‘\0’)

  6. 0
    if (!*ptr) { /* empty string  */}

    del mismo modo

    if (*ptr)  { /* not empty */ }
    • hmm, esto debería funcionar para el caso char *str = «»; if (!*str) { printf(«vacía\n»); }. no me faltan algunas sutiles caso?
    • Lo siento, tienes razón – fue mi estúpido C-puntero de supervisión. Tuve el caso de que el str se apunta a una dirección que contenga ‘\0’ sólo. De modo que el puntero (*str) es no nulo, donde el valor (contenido de la dirección apuntada por str) era nula.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea