76 votes

Comment puis-je vérifier si la variable char* pointe sur une chaîne vide ?

Comment puis-je vérifier si char* pointe vers une chaîne vide ?

131voto

codemaker Points 478

Vérifier si le premier caractère est ' \0 '. Vous devriez aussi probablement vérifier si votre pointeur est NULL.

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

Vous pourriez placer ces deux contrôles dans une fonction pour la rendre pratique et facile à réutiliser.

Éditer : L'instruction if peut être lue comme suit : "Si c n'est pas zéro et que le premier caractère du tableau de caractères 'c' n'est pas '". \0 ou zéro, alors...".

El && combine simplement les deux conditions. En gros, c'est comme si on disait ceci :

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

Vous pouvez vous procurer un bon livre de programmation en C si cela n'est pas clair pour vous. Je pourrais vous recommander un livre intitulé "Le langage de programmation C".

La version la plus courte équivalente à ce qui précède serait :

if (c && !c[0]) {
  printf("c is empty\n");
}

17voto

Mark Ransom Points 132545

Ma méthode préférée :

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

C'est probablement plus courant :

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

8 votes

Notez que la deuxième possibilité, "plus courante", est également inutilement plus lente.

4 votes

@jpalecek, la lenteur n'a pas souvent d'importance et strlen sera plus facile à comprendre si vous n'êtes pas habitué à la première forme.

0 votes

@Adban, sur ce site, la meilleure façon de remercier quelqu'un est d'appuyer sur la flèche vers le haut à côté de la réponse :)

9voto

Alok Save Points 115848

Vérifiez le pointeur pour NULL et ensuite en utilisant strlen pour voir s'il retourne 0 .
NULL est important car le fait de passer NULL pointeur vers strlen invoque un Comportement indéfini .

6voto

Basile Starynkevitch Points 67055

Une chaîne vide contient un seul octet nul. Ainsi, le test if (s[0] == (char)0)

5 votes

Pas besoin de la (char) la distribution.

3voto

bhuwansahni Points 882

Je préférerais utiliser la fonction strlen car les fonctions de la bibliothèque sont implémentées de la meilleure façon.

Ainsi, j'écrirais if(strlen(p)==0) //Chaîne vide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X