Печать восьмеричного литерала в printf

#c #octal

#c #восьмеричный

Вопрос:

Каков правильный способ печати восьмеричного литерала? Например, следующее работает для шестнадцатеричной цифры x , но не для восьмеричной :

 printf("x66 102n");
 

f 2

Как это можно сделать?

Комментарии:

1. David542, с printf("102n"); каким выводом вы хотели?

2. @chux-RestorateMonica f B так и должно было быть: printf("x66 102n") — Я думал , что для восьмеричного требуется начальная строка.

Ответ №1:

Восьмеричный литерал состоит из 1-3 цифр. подобная 4-значная последовательность 102 не поддерживается. Кажется, это рассматривается как два символа: 10 и 2 .

То, что вы хотите, может быть printf("x66 102n"); . Это будет напечатано f B , если используется ASCII.

Цитата из N1570 6.4.4.4 Символьные константы:

восьмеричная escape-последовательность:
восьмеричная цифра
восьмеричная цифра восьмеричная цифра
восьмеричная цифра восьмеричная цифра восьмеричная цифра

Восьмеричные цифры, которые следуют за обратной косой чертой в восьмеричной escape-последовательности, считаются частью построения одного символа для целочисленной символьной константы или одного расширенного символа для расширенной символьной константы. Числовое значение сформированного таким образом восьмеричного целого числа определяет значение желаемого символа или широкого символа.

Комментарии:

1. Я вижу, поэтому в строке формата не 0 требуется предшествовать ей.

2. @David542 Этот ruie предназначен для любых строковых литералов и символьных констант, а не только для строк формата.