2012-10-17 2 views
1

Можно создать дубликат:
Correct way to use scanf/printf (and family) with fixed size types?C - Исключение при использовании _int16

я написал следующую программу в Visual Studio:

После запуска программы и выхода, я получаю сообщение об ошибке «стек вокруг переменной b было повреждено». Если я заменил _int 16 на int, исключение не будет создано. Как я могу решить эту проблему, пожалуйста? Я должен использовать _int16, так как я хочу симулировать переполнение целого числа. Спасибо :)

+7

Ваше использование 'scanf' предполагает полное слово целое число не 16-битное целое число , Попробуйте ''% hd "' как шаблон в [manual] (http://www.cplusplus.com/reference/clibrary/cstdio/scanf/) –

+0

Спасибо :) Что следует использовать вместо этого, пожалуйста? Я отчасти новичок в C. – Matthew

+0

Прочитайте страницу scanf man и найдите «short int». – Barmar

ответ

2

Как было отмечено в комментариях, решение заменить

scanf("%d", &a); 

с

scanf("%hd", &a); 
+0

Это будет работать, только если '_int16' имеет тот же размер, что и' short', но они не должны быть одинакового размера. –