2012-01-26 4 views
19

Я не понимаю, что %s и d% делать в этом C-код:Что означает% s и% d в printf на языке C?

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

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

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

Вы взглянули на человека 3 printf? http://linux.die.net/man/3/printf –

+7

Строковые литералы, переданные 'printf', бессмысленны - должны быть' printf («Длина строки% d is% d \ n», i, strlen (код [i])); ' –

+0

Итак, строковые литералы просто обозначают, где в строке помещен вывод из этих переменных? Это похоже на странный способ сделать что-то? –

ответ

43

Семейство функций 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 format string

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

+1

Спасибо, именно то, что я хотел знать :). –

+4

Нет проблем! Просто голова: это не всегда%, за которым следует один символ. Они могут получить немного дикие -% .02lf - но это позволяет вам делать аккуратные вещи :) – iccir

3

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

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

3

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

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

+1

А я вижу! Я получаю это сейчас! Спасибо, очень полезно :) –

1

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

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

1

% s для строки % d для десятичного (или Int) % C для символа

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

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

0

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

0

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

1

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

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

2

% d является печать в качестве ИНТ % s является печать в виде строки % е является печать в виде числа с плавающей точкой

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

Смежные вопросы