Corrupted stack - C (СИ)
Формулировка задачи:
Доброе утро, подскажите где я накосячил со стэком?
#include <stdio.h>
#include <string.h>
char GetAddress(char **file_content) {
char slaveAddr;
sscanf((*file_content), "%2X", &slaveAddr);
slaveAddr = (slaveAddr >> 1);
(*file_content)+=2;
unsigned int addr = (unsigned int)&slaveAddr; // моя проверка, чтобы посмотреть что переменная правда в памяти есть
return slaveAddr;
}
int main() {
char* file_content = "3245678";
char slaveAddr = GetAddress(&file_content);
return 0;
}Решение задачи: «Corrupted stack»
textual
Листинг программы
unsigned char slaveAddr; sscanf(*file_content, "%2hhX", &slaveAddr);
Объяснение кода листинга программы
- Переменная
slaveAddrтипа unsigned char объявлена для хранения адреса раба. - Ввод данных осуществляется с помощью функции
sscanf. - Формат ввода
%2hhXозначает, что вводится 1 байт (8 бит). - Функция
sscanfпытается считать данные из файла, на который указываетfile_content. - Результат считывания сохраняется в переменной
slaveAddr.