putchar () vs printf () - есть ли разница?

в данный момент я нахожусь в главе 1.5.1 копирование файлов и сделал программу так:

#include <stdio.h>

/* copy input to output; 1st version */
main()
{
    int c;

    c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
}

если бы я запустил его так:

PS <..loc..> cc copy-0.c
PS ./a
Black
Black
White
White
Gray
Gray

выход - это то, что я ввожу.

и вот программа, которую я сделал для экспериментальных целей:

#include <stdio.h>

/* copy input to output; 1st version */
main()
{
    int c;

    c = getchar();
    while (c != EOF) {
        printf("%c",c);
        c = getchar();
    }
}

это дает тот же результат, но есть ли разница между putchar и printf?

что лучше использовать между 2?

5 ответов


printf - Это универсальная функция печати, которая работает со 100 различными спецификаторами формата и печатает правильную строку результата. putchar, ну, помещает символ на экран. Это также означает, что он, вероятно, намного быстрее.

вернемся к вопросу: используйте putchar для печати одного символа. Опять же, это, вероятно, намного быстрее.


я скомпилировал пример, используя printf ("a") с-S и получил вызов putchar в коде сборки. Похоже, когда у вас есть только один символ в printf, компилятор превращает его в putchar(). Я сделал еще один пример с помощью printf ("ab") и получил вызов printf с текстовым разделом в регистре %edi.


printf позволяет форматировать строки сложным образом, подставляя такие вещи, как целые числа и поплавки и другие строки.

getchar и putchar сделать и поставить знаки

Я могу сказать, что printf более полезен по сравнению с putchar.

лучше посмотрите на их соответствующих страницах руководства (man 3 printf man 3 putchar) в терминале


  1. Putchar : печатает только один символ на экране, как синтаксис говорит.
  2. Printf: строка или слово printf на экране. Следовательно, когда вы хотите отобразить только один символ на экране, используйте putchar. Для чтения строки используйте функцию gets. Для отображения строки вы можете использовать puts() или printf.

разница в том, что putchar печатает один символ, а printf можно печатать намного больше.

printf("%s\n", "this is a lot longer than one character");

обычно, когда вы печатаете что-то на терминале, вы хотите закончить его символом новой строки,'\n'. По крайней мере по этой причине я предложил бы использовать printf как тогда можно писать

printf("%c\n", c);

вместо

putchar(c);
putchar('\n');