web-dev-qa-db-fra.com

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

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

47
Aan

Vérifiez 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 pouvez mettre ces deux contrôles dans une fonction pour le rendre pratique et facile à réutiliser.

Edit: Dans l'instruction if, on peut lire 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 ...".

Le && combine simplement les deux conditions. C'est fondamentalement comme dire ceci:

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

Vous voudrez peut-être obtenir un bon livre de programmation en C si cela ne vous semble pas clair. Je pourrais recommander un livre intitulé "Le langage de programmation C".

La version la plus courte équivalente à celle ci-dessus serait:

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

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

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

Probablement plus commun:

if (strlen(ptr) == 0) // empty string
10
Mark Ransom

Vérifiez le pointeur pour NULL puis utilisez strlen pour voir s’il renvoie 0.
NULL check est important car passer NULL un pointeur sur strlen invoque un comportement non défini.

9
Alok Save

Une chaîne vide a un seul octet nul. Alors testez if (s[0] == (char)0)

6

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

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

2
bhuwansahni

Donnez-lui une chance:

Essayez d'obtenir une chaîne via function obtient (chaîne), puis vérifiez la condition comme si (chaîne [0] == '\ 0')

1
ikm104
if (!*ptr) { /* empty string  */}

de même

if (*ptr)  { /* not empty */ }
0
alvin