Кроме того @ Дэвид Раньери точный ответ, я хотел объяснить, что "вывод дает мне только ?????????? символов."
"%c"
принимает аргумент int
. Напомним, что char
, переданный функции ...
, преобразуется в int
. Затем
аргумент int
преобразуется в unsigned char
, и результирующий символ записывается. C17dr § 7.21.6.1 8.
Таким образом printf("%c" ...
обрабатывает значения 0-255. Значения за пределами этого диапазона преобразуются в этот диапазон.
Код OP ниже переписан в шестнадцатеричном формате.
// for (int i = 12784; i <= 12799; i++) {
for (int i = 0x31F0; i <= 0x31FF; i++) {
printf("%c\n",i);
}
С настройкой и реализацией языкового стандарта OP выводятся значения печати [0xF0 - 0XFF ] привело к '?'
. Я уверен, что это верно для [0x80 - 0xFF] для OP. Другие возможности существуют. Я получил �
.
Если бы OP выполнил следующее, более знакомый результат был бы виден, хотя и не нужные символы Хирагана.
for (int i = 0x3041; i <= 0x307E; i++) {
printf("%c",i);
}
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~