Как избежать знака% при использовании printf
в C?
printf("hello\%"); /* not like this */
c
printf
format-string
Chris_45
источник
источник
%
специфиченprintf
, правильно?\045
это escape-время компиляции, которое является частью языка и превратится в%
при компиляции.printf
это функция времени выполнения, поэтому она имеет дело с байтами вашей строки, а не с исходным кодом на языке Си, и имеет свои собственные escape-последовательности, которые являются частью функции . Короче говоря,printf
это «язык внутри языка» иprintf("This is a's value: %s\n", a);
дает тот же результат, что иprintf("This is a's value: \045\0163\012", a);
.printf("hello%c", '%');
. Однако%%
лучше, потому что он не использует другой аргумент.Как уже говорили другие, %% избежит%.
Обратите внимание, однако, что вы никогда не должны делать это:
Всякий раз, когда вам нужно напечатать строку, всегда, всегда, всегда печатайте ее, используя
чтобы предотвратить встраивание%% в проблемы [нарушения памяти, segfault и т. д.]
источник
Если в строке нет форматов, вы можете использовать
puts
(илиfputs
):если в строке есть формат:
Как отмечено в комментариях,
puts
добавляет\n
к выводу иfputs
не делает.источник
puts
. Я никогда не думал оputs
печати строк и прыгнул прямо кprintf
. Уже нет.С собой ...
источник
Nitpick:
Вы на самом деле не экранируете
%
строку, которая определяет формат для семейства функцийprintf()
(иscanf()
).%
, Вprintf()
(иscanf()
) семейства функций, начинает спецификацию преобразования. Одно из правил для спецификации преобразования гласит, что%
в качестве спецификатора преобразования (сразу после того,%
который запустил спецификацию преобразования) вызывается запись'%'
символа без преобразования аргумента.Строка действительно имеет 2
'%'
символа внутри (в отличие от экранирующих символов:"a\bc"
строка с 3 ненулевыми символами;"a%%b"
строка с 4 ненулевыми символами).источник
использовать двойной %%
источник
Как это:
источник
Обратная косая черта в C используется для экранирования символов в строках. Строки не будут распознавать% как специальный символ, и, следовательно, нет необходимости в экранировании. Другое дело в printf: используйте %%, чтобы напечатать один%.
источник
Ты можешь использовать %%:
Результат:
источник
вы используете неверный спецификатор формата, который вы должны использовать
%%
для печати%
. Ваш код должен быть:Подробнее все спецификаторы формата , используемые в Си .
источник
Да, используйте printf ("привет %%"); и это сделано.
источник
Вы можете просто использовать
%
дважды, то есть"%%"
Пример:
источник
Двойной «%» работает также в «.Format (…). Пример (с iDrawApertureMask == 87, fCornerRadMask == 0,05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
дает желаемое и ожидаемое значение (содержимое строки в) csCurrentLine;»% ADD87C, 0,0500 *% "источник