web-dev-qa-db-ja.com

char *変数が空の文字列を指しているかどうかを確認するにはどうすればよいですか?

char*変数は空の文字列を指しますか?

47
Aan

最初の文字が「\ 0」かどうかを確認します。また、ポインターがNULLかどうかも確認する必要があります。

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

これらのチェックの両方を関数に入れて、便利で簡単に再利用できるようにすることができます。

編集:ifステートメントでは、次のように読み取ることができます。「cがゼロではなく、文字配列 'c'の最初の文字が '\ 0'またはゼロではない場合、...」.

&&は、単に2つの条件を組み合わせたものです。基本的にこれを言うようなものです:

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

明確でない場合は、良いCプログラミングの本を手に入れたいかもしれません。 「The C Programming Language」という本をお勧めできます。

上記と同等の最短バージョンは次のとおりです。

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

私の好ましい方法:

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

おそらくより一般的:

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

NULLのポインターを確認し、strlenを使用して、0を返すかどうかを確認します。
NULLチェックは、NULLポインターをstrlenに渡すとndefined Behaviorを呼び出すため重要です。

9
Alok Save

空の文字列には、単一のヌルバイトがあります。テストif (s[0] == (char)0)

ライブラリ関数は最適な方法で実装されているため、strlen関数を使用することをお勧めします。

だから、if(strlen(p)== 0)//空の文字列を書きます

2
bhuwansahni

チャンスを与えてください:

関数gets(string)を介して文字列を取得してから、if(string [0] == '\ 0')として条件を確認してください。

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

同様に

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