что выводит этот нуль-символ печати? - PullRequest
0 голосов
/ 19 февраля 2020

Я ожидаю пробел для printf("%c",i), в то время как он явно возвращает значение после оценки оператора, поэтому я думаю, что он должен напечатать пустое значение или другое значение по этому вопросу, поскольку это не нулевая строка, а нулевая символ.

Все, что я говорю, это printf возвращает некоторое значение после завершения вызова, поскольку это функция. поэтому, когда printf("%c",i) возвращает какое-то значение, оно должно что-то напечатать.

#include<stdio.h>
int main()
{
    int  i = 0;
    if(printf("%c",i))
        printf("inside if block");
    else
        printf("inside else block");
    return 0;
}

1 Ответ

4 голосов
/ 19 февраля 2020

Я ожидаю пробела для printf ("% c", i)

printf("%c",0) напечатает нулевой символ . То, что видно на терминале, зависит от реализации. Это может быть пробел, ничего, , , ^@ и т. Д. 1026 *. Это не имеет ничего общего с C строками .

Я говорю, что printf возвращает некоторое значение после завершения вызова

return значение printf("%c",i) равно «... количество переданных символов или отрицательное значение, если произошла ошибка вывода или кодирования». (C17dr § 7.21.6.3 3). printf("inside if block"); определенно выполняется, поскольку 1, вероятно, возвращается из (printf("%c",i).

...