frogstail: Эмблема U-124 c http://uboat.net (Default)
В Visual Studio 2015 поломали sscanf. Как поломали: в кодировке 1251 шаблоны на русском языке не работают.

Теперь нельзя просто взять и написать:

const char* str = "номер 100";

int num;

const int n_scanned = sscanf( str, "номер %d", &num );

n_scanned будет равно нулю, num не прочитан, в чём дело?

Глубоко в недрах sscanf есть конечный автомат, сопоставляющий строку с шаблоном. Он вызывает в цикле int get_char() для получения символа строки или -1 — EOF.

Далее этот int ojuelos pedoroso из микрософт сравнивают с символом шаблона (типа signed char) без приведения типов к signed char. Символ строки, попавший в int претерпевает расширение знакового бита (в кодировке 1251 там стоит единица) и сравнение производится между значениями 0xFFFFFFXX и 0x000000XX. Естественно, шаблона sscanf в строке не находит и работать отказывается.

Установка locale на этот говнокод, разумеется, не действует, больному легче не становится.


Как теперь с этим быть?

ППКС

May. 23rd, 2017 12:03 am
frogstail: Эмблема U-124 c http://uboat.net (Default)


Транспортировку и использование на время футбола разрешили, но только спортсменам и всяким юридическим лицам.

РФ — страна развитого феодализма, в которой податные сословия, так называемые «россияне» или «население», — самые бесправные.

Profile

frogstail: Эмблема U-124 c http://uboat.net (Default)
frogstail

September 2017

S M T W T F S
     12
34 56 789
10111213141516
17181920212223
24252627282930

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 19th, 2017 03:14 pm
Powered by Dreamwidth Studios