Sscanf встроенное устройство? - PullRequest
0 голосов
/ 28 февраля 2012

У меня проблема с sscanf на встроенном устройстве, язык C.
Мой код такой:

unsigned char by = 0;
char txt[] = "12";
sscanf(txt , "%hhd" , &by);
printf("%d" , by);

Когда я запускаю этот код в Linux, он правильный, но в Windows (VS2010) есть ошибка:

"Стек вокруг переменной" поврежден ".

И в моем встроенном устройстве переменная ошибки 'by' изменяется на ноль.

что мне делать с этим кодом?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012

Просто используйте atoi :

const char* txt = "12";
unsigned char by = (unsigned char ) atoi(txt);

И еще одна вещь.

printf("%d" , by); 

Это не будет работать правильно, потому что printf ожидает подписанного int и получает неподписанный символ. Он может работать, только если ваша встроенная система имеет 8-битные целые числа, но не будет работать на ПК.

Причина, по которой вы получаете ошибку поврежденного стека, заключается в том, что sscanf интерпретировал% hhd как означающий, что он должен читать десятичное значение (я проверял это на моем компьютере), и поэтому он перезаписал память вокруг переменной «by» с помощью 4 байты (если у вас есть 32-битные целые).

0 голосов
/ 28 февраля 2012

При проверке страницы MSDN при scanf форматировании ширины спецификатор "hh" не поддерживается VC ++.

Вместо этого используйте strtol, если можете.

...