Частина 17 - "ПОВНОВЛАСТНІСТЬ ЗНИЩУЄ ПОВНІСТЬ!", Трагічна історія Введення...
"Але я тільки тут, щоб вивчити Обратну Інженерію. Я справді не цікавлюся не-сексуальною частиною програмування, я тільки хочу викликати Обратну Інженерію і стати суперзіркою!"
Ах, наївність тих, хто не є Джедаєм. Для них багато чого потрібно вивчити або, може бути, вивчити знову, щоб дійсно вивчити!
Я не роблю жодної спроби підмінити програмні книги і курси, які вчать, як захоплювати STDIN від користувачів у простому вигляді, наприклад, 'scanf', але я натомість викликаю вас, щоб розглянути належний підхід.
Ми маємо справу з мікроконтролером. Він є ВИБРАНОЮ мішенню авторів Рansomware, державних агентів і всіх інших неприємних осіб. НАМУ СПОРОМНО потрібно спочатку зрозуміти, як належним чином обробляти вхідні дані щодо мікроконтролера.
Я взяв на себе свободу побудувати належну функцію введення для вашої оцінки.
#include <stdio.h> #include <string.h> #include "pico/stdlib.h" #define ZERO 0x30 #define NINE 0x39 #define PERIOD 0x2e #define CAPITAL_A 0x41 #define LOWER_CASE_Z 0x7a #define BACKSPACE 0x08 #define DEL 0x7f void input_proc(char type, char* p_usb_char, char* p_usb_string, const int* p_USB_STRING_SIZE) { *p_usb_char = '\0'; *p_usb_char = getchar_timeout_us(0); if(*p_usb_char == BACKSPACE || *p_usb_char == DEL) { if(p_usb_string[0]!= '\0') { printf("\b"); printf(" "); printf("\b"); p_usb_string[strlen(p_usb_string)-1] = '\0'; } } if(type == 'f') { char* period; while((*p_usb_char >= ZERO && *p_usb_char <= NINE) || *p_usb_char == PERIOD) { if(*p_usb_char == PERIOD) period = strchr(p_usb_string, '.'); if(period == NULL) { if(strlen(p_usb_string) < *p_USB_STRING_SIZE) { putchar(*p_usb_char); strncat(p_usb_string, p_usb_char, 1); } *p_usb_char = '\0'; } else break; } } else if(type == 'd') { while(*p_usb_char >= ZERO && *p_usb_char <= NINE) { if(strlen(p_usb_string) < *p_USB_STRING_SIZE) { putchar(*p_usb_char); strncat(p_usb_string, p_usb_char, 1); } *p_usb_char = '\0'; } } else if(type == 's') { while(*p_usb_char >= CAPITAL_A && *p_usb_char <= LOWER_CASE_Z) { if(strlen(p_usb_string) < *p_USB_STRING_SIZE) { putchar(*p_usb_char); strncat(p_usb_string, p_usb_char, 1); } *p_usb_char = '\0'; } } }
"Ох, я подумав, що ми йшли повільно!" Тепер настало час належним чином розпочати розуміти, як бути Джедаєм при розробці ефективного програмного забезпечення. Тепер настало час належним чином засвоювати справжню функцію перевірки входу.
Я хочу, щоб ви взяли час і засвоїли цю функцію, щоб ми могли її переглянути в наступному урокі.
У наступному урокі ми належним чином розберемо цю роботу генієві, щоб належним чином зрозуміти і створити, і, в кінцевому підсумку, здійснити Обратну Інженерію у нашій майбутній майбутності!