kincajou: (Default)
K ([personal profile] kincajou) wrote2012-03-21 12:02 am

я, наверное, проклят

Перестало получаться даже самое элементарное. Что глючит? или это я окончательно сошёл с ума?
Дано: в буфере buffer лежит строка ASCII, содержащая три целых числа (в виде их записи), то есть, например, 6 -236 0
Скармливаю её sscanf (buffer, "%lu %d %d", &n, &I, &Q);
На выходе получаю, что n, I и Q равны соответственно 6, 0 и 0.
Скармливаю другую строчку: 7 0 -251.
Получаю 7, -1 и -251

Такое ощущение, что вот именно второе число считываться упорно не хочет. Что это? Как это?! Всегда работало и вдруг такое...

Мало того, поведение программы ещё и зависит от того, с какими флагами оптимизации её скомпилить! Например, если оптимизацию отключить совсем, тогда ещё и первое число не воспринимается - читается либо 0, либо 65535. Бред какой-то.

[identity profile] tigerofsiberia.livejournal.com 2012-03-21 05:06 am (UTC)(link)
Мне кажется, формат %lu всё портит, может, просто %d туда воткнуть?

[identity profile] kincajou.livejournal.com 2012-03-21 08:41 am (UTC)(link)
пробовал, ничего не меняется. При выключенной оптимизации получается трэш, при включённой помогла замена %d на %hd (т.е. точное указание длины разбираемых данных). При этом %lu - это тоже точное указание (если я правильно помню, то это означает 32 битное беззнаковое -- именно то, что надо)