0
#include<stdio.h>
#include<conio.h>

int main()
{
    char arr[]="\0";
    if(printf("%s",arr))
        printf("not empty");
    else
        printf("empty");
    return 0;
}

ここで\0は、配列内の 1 バイトとして取得され、1 バイトprintfが返されると考えたので、not empty を出力する必要があります。しかし、出力はそれが返されたemptyことを意味します。では、どのようにかかりますか?printf0printf\0

4

5 に答える 5

2

printf ではなく、文字列の処理方法です。文字列は \0 で終了し、\0 を「含みません」。%s を介して文字列を出力するよう printf に要求しています。そのため、\0 を含まない文字列の内容が出力されるため、空になります。

于 2013-09-06T09:34:34.057 に答える
0

%s を持つ printf() 関数は、'\0' が見つかるまで値を読み取ります。'\0' を読み取らないため、0 が返され、結果が空になります。

于 2013-09-06T09:34:51.663 に答える
0

arr02バイトを含む 2 文字の配列です。1 つ0は明示的に指定され、もう 1 つは文字列リテラルに暗黙的に挿入されます。

format specifier を使用して文字列を%s出力すると、ターミネータprintf()に遭遇するまで出力されます。0最初の文字は0(文字列は最初の文字で終了することに注意してください0) であるため、printf()何も出力しません。

printf()この場合は 0 である、正常に印刷された文字数を返します。したがって、if句は失敗し、else句が実行されます。Soemptyが出力として出力されます。

于 2013-09-06T09:42:34.087 に答える