LINUX.ORG.RU

sscanf_s x64


0

1

Есть вот такой код на C:

short d=0,m=0,y=0,h=0,min=0,sec=0;
sscanf_s(str,"%d.%d.%d %d:%d:%d",&y,&m,&d,&h,&min,&sec); 

На 32 разрядной системе, при сканировании строки «2000.00.00 00:00:00» компилятор (тот, что поставляется с vs2010) выдает ошибку, что стек возле переменной sec нарушен. В чем проблема?

p.s. при замене short на unsigned int работает нормально. при замене на DWORD ошибка проявляется вновь.

P.P.S. ошибка проявилась на 64 разрядной системе



Последнее исправление: lsv (всего исправлений: 1)

man strptime

anonymous
()

d

Matches an optionally signed decimal integer; the next pointer must be a pointer to int.

Ты подсовываешь по два байта туда, куда sscanf запишет четыре байта (на ia32). Юзай инты.

yoghurt ★★★★★
()

Нужно либо:
- заменить short на int, либо
- заменить short на int16_t и %d на SCNi16

Sorcerer ★★★★★
()

Всем спасибо

lsv
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.