Использование printf () в C для распечатки этого символа symbol (ASCII 152) - PullRequest
0 голосов
/ 26 сентября 2019

Я не могу распечатать этот специальный символ ÿ (ASCII 152).Глядя на отладчик, я вижу, что переменная сохраняет специальный символ.На данный момент он просто печатает пробел.

Мой упрощенный код выглядит примерно так

Структура:

typedef struct BufferDescriptor {
    char* cb_head;
}* pBuffer;

//Current object
pBuffer ptr_Buffer;

Строка, которая добавляет символ к cb_head:

//Calling addsymbol, the symbol used is EOF
addsymbol(ptr_Buffer, EOF);

Buffer* addsymbol(Buffer p, char symbol){
    p->cb_head[add] = symbol;
}

Myprintf, я уже проверил значение буфера переменной, и оно содержит символ..Но он просто печатает пробел ... Есть ли что-то, что может зависеть от машины, или что-то в ASCII, которое мне не хватает.

printf("%c",buffer);

1 Ответ

4 голосов
/ 26 сентября 2019

Если один и тот же номер по-разному отображается в разных программах, вероятно, это проблема кодировки символов .Есть много, много, много разных способов интерпретировать число 152 в символ.Каждое приложение может использовать разные кодировки.Похоже, ваш редактор и везде, где вы печатаете, используют разные кодировки.

ASCII 152 отсутствует. ASCII 7-битный, только до 127.

Есть много, многомножество расширенных кодировок ASCII , которые добавляют 8-й бит для покрытия 128-255.У них одинаковые кодировки для первых 127 символов, после этого они расходятся .CP 437 и CP 850 имеют ÿ как 152. Latin-1 и Windows-1252 ÿ - 255. Большинство современных вещей использует UTF-8 , который представляет ÿ как два байта, c3 bf.

152 - это ничто в Latin-1 и ничто в UTF-8.

Вероятно, что-то происходитвсе используют UTF-8 (152 недействительно), а некоторые используют CP 850 (152 - ÿ).Проверьте кодировки символов вашей IDE и все, что вы используете для отображения.

...