C 编程中的 sizeof() 行为

san*_*136 4 c sizeof string-literals implicit-conversion

这是我的程序..

int main(void) {

    printf("%lu\n", sizeof(""));

    // first if else statement
    if(1 > -2) printf("Yes");
    else printf("No");

    printf("\n");

    // second if else statement    
    if( sizeof("") > -2) printf("Yes");
    else printf("No");
}
Run Code Online (Sandbox Code Playgroud)

首先 printf() 为什么它打印 1 作为输出,尽管我传递了一个空字符串?在第一个 if-else 语句中,我得到了正确的输出 -> 是预期的,但是在第二个 if-else 语句中它打印输出 -> 不,谁能解释一下为什么会发生这种情况?

我的输出是.. 1 是 否

提前致谢 :-)

sep*_*p2k 6

sizeof("")是一种,因为字符串文字表示包含给定字符后跟 '\0' 的字符数组。所以""代表字符数组{'\0'}

sizeof("") > -2为 false 因为sizeof返回 a size_t,它是一个无符号整数类型。比较导致-2转换为size_t,这导致它环绕并成为一个比 1 大得多的数字。