Недавно я наткнулся на ошибку в Visual Studio 2008 (по крайней мере, я думаю, что это один).
Когда я пытаюсь создать струнно-литералы с двумя вопросительными знаками, за которыми следует другой символ, происходит нечто странное: эти три символа заменяются другим символом.
Примеры:
printf("??-"); --> ~ (hyphen)
printf("??'"); --> ^ (circumflex)
printf("??="); --> # (hash)
printf("??)"); --> ] (square braket)
printf("??("); --> [ (square braket)
printf("??/"); --> \ (backslash)
printf("??!"); --> | (pipe)
printf("??%"); --> ?? (percent sign disappears)
Кто-нибудь знает причину этой замены?
Это не ошибка, скорее похмелье истории. Это триграфы C — https://msdn.microsoft.com/en-us/library/bt0y4awe.aspx
Ди-триграфы — это способ представления символов, которые не были легко доступны еще при разработке языка. Они позволяют вам вводить символы в ваш исходный код, которые вы, возможно, не имеете клавиши клавиатуры для представления.
Tri-graph Symbol
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~
Проблема% — это просто обычная проблема в printf, где вам нужно экранировать% с%, если вы хотите его увидеть. Это потому, что% обычно является началом спецификатора формата.
Других решений пока нет …