Неожиданное поведение функции printf в c - PullRequest
0 голосов
/ 05 апреля 2019

Я недавно столкнулся с вопросом об интервью. Я не понял поведение функции printf в этом случае

 #include <stdio.h>
 int main() {
 int k = printf("String");
 printf("%d",k);
 }

Ожидаемый результат: ошибка компиляции

Выход: String6

Почему вывод String6?

Ответы [ 2 ]

6 голосов
/ 05 апреля 2019

Вот прототип для printf:

int printf(const char *format, ...);

Мы можем видеть, что printf возвращает int.

Документация указывает, что:

При успешном возврате эти функции возвращают количество напечатанных символов (исключая нулевой байт, использованный для завершения вывода в строки).


Вы спросили, почемувывод "String6".Ну:

printf("String");

Сначала печатается String, но не печатает символ новой строки.Поскольку String - это 6 символов, printf возвращает 6, которые вы сохраняете в k:

printf("%d",k);

После этого выдается 6 (в той же строке).


Попробуйте запустить эту программу:

#include <stdio.h>
int main(void)
{
    int bytes_printed = printf("%s\n", "String");
    //              7 =           1  +  6

    printf("printf returned: %d\n", bytes_printed);

    return 0;
}

Вывод:

String
printf returned: 7
4 голосов
/ 05 апреля 2019

функция printf() возвращает количество напечатанных символов. Поскольку вы устанавливаете int k = printf("String");, функция печати выполняет печать «String» и установку k равной 6, поскольку «String» имеет длину 6 символов, тогда ваш второй вызов printf печатает значение k, которое равен 6, в результате чего на консоли отображается «String6».

Это совершенно правильный синтаксис C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...