Что означает %s и %d в printf на языке C? [закрытый]

Я не понимаю, что тег %s и d% сделайте в этом коде C:

for (i=0;i<sizeof(code)/sizeof(char*); i++) {
    printf("%s%d%s%dn", "Length of String ", i, " is ", strlen(code[i]));
    str = code[i];
    printf("%s%d%s%cn","The first character in string ", i, " is ", str[0]);
}

Я новичок в языке C и мой фон в Java.

  • что делать %s%d%s%d символы обозначают?
  • почему их так много?
  • запятая используется здесь для конкатенации вместо +?

9 ответов


семейство функций printf () использует % символ в качестве заполнителя. Когда % встречается, printf считывает символы, следующие за % чтобы определить, что делать:

%s - Take the next argument and print it as a string
%d - Take the next argument and print it as an int

см. эту статью Википедии для хорошей картины:строка формата printf

на \n в конце строки для перевода строки/возврата каретки.


% нотация называется спецификатором формата. Например, %d указывает printf () напечатать целое число. %s для печати строки (char *) и т. д. Вы действительно должны посмотреть его здесь:http://google.com/search?q=printf+формат + спецификаторы

нет, запятые не используются для конкатенации строк. Запятые предназначены для разделения аргументов, передаваемых функции.


первый аргумент обозначает заполнители для следующих переменных / параметров.
Например, %s означает, что вы ожидаете String быть вашим первым параметром печати.

Java также имеет printf, что очень похоже.


%d печатается как int %s-печать в виде строки %f-печать с плавающей запятой

следует отметить, что неверно говорить, что это отличается от Java. Printf означает формат печати, если вы выполняете форматированную печать на Java, это точно такое же использование. Это может позволить вам решить интересные и новые проблемы как на C, так и на Java!


первый аргумент printf - это строка из идентификаторов.

%s ссылается на строку %d относится к целому числу %C относится к символу. Поэтому: %s%d%s%c\n печатает строку "первый символ в sting", %d печатает i, %s печатает " is " и %c печатает str[0].


%s для строки %d-десятичное число (или int) %c для символа

похоже, что он пережевывает массив символов и распечатывает любую строку, начиная с каждой последующей позиции. Строки будут останавливаться на первом null в каждом случае.

запятые просто разделяют аргументы на функцию, которая принимает переменное число args; это число соответствует числу % args в дескрипторе формата спереди.


"%s%d%s%d\n" - строка формата; она сообщает printf функция как форматировать и отображать выходные данные. Что-нибудь в строке формата, у которого нет % непосредственно перед ним отображается как есть.

%s и %d являются спецификаторами преобразования; они говорят printf как интерпретировать остальные аргументы. %s говорит printf что соответствующий аргумент должен рассматриваться как строка (в терминах C, 0-завершенная последовательность char); тип соответствующий аргумент должен быть char *. %d говорит printf что соответствующий аргумент должен рассматриваться как целое значение; тип соответствующего аргумента должен быть int. Поскольку вы исходите из фона Java, важно отметить, что printf (как и другие вариационные функции) полагается на вы чтобы рассказать ему, каковы типы оставшихся аргументов. Если строка формата "%d%s%d%s\n", printf попытается обработать "Length of string" как целочисленное значение и i как строка, с трагическими результатами.


%(буква) обозначает тип формата замещающего текста. %s задает строку, %d-целое число и %c-символ.


%s%d%s%d\n-строка формата. Он используется для указания того, как информация форматируется на выходе. здесь строка формата должна печатать строку, за которой следует цифра, за которой следует строка, а затем снова цифра. Последний символ \n представляет возврат каретки, который отмечает конец строки. В C строки не могут быть объединены + или, хотя вы можете комбинировать различные выходные данные в одной строке с помощью соответствующих строк формата (использование строк формата для форматирования выходных данных информация.).