Я пытаюсь сделать калькулятор, который берет пустой указатель с именем yourVal, смотрит на первый байт и решает, является ли он «*» или «/». Основываясь на знаке, я умножаю байты на 3+4, 5+6 и 7+8. скажем, у меня *1234567. Я умножаю 23 * 45 * 67. При делении я делю байт 5 (45) на байт 3 (23). Я новичок с указателями в C, и я действительно понятия не имею, как даже установить значение для указателя void. Когда я делаю следующее в main
void *yourVal;
*yourVal = "*1234567";
printf("%s\n", yourVal);
Я не могу разыменовать пустой указатель. Но я пробовал с указателем char, и у меня та же проблема. Это мой код для функции калькулятора. В зависимости от того, использую я printf или нет, я получаю разные результаты.
int calculator(void *yourVal){
char *byteOne;
short int *byteThree, *byteFive, *byteSeven;
int value;
byteOne = (char *)yourVal;
byteThree = (short int *)yourVal+2;
byteFive = (short int *)yourVal+4;
byteSeven= (short int *)yourVal+6;
if(*byteOne == '*') {
value = *byteThree * *byteFive * *byteSeven;
printf("You multiplied\n");
}
else if(*byteOne == '/') {
if (*byteThree == 0) {
value = 0xBAD;
printf("Your input is invalid\n");
}
else {
value = *byteFive / *byteThree;
printf("You divided\n");
}
}
else {
value = 0xBAD;
printf("Your input is invalid\n");
}
}
Деление вообще не работает, а умножение захватывает только одну цифру. Любые советы будут оценены. Я просмотрел разные источники, но не вижу, как эффективно работать с указателями на пустоту. Кроме того, я не могу использовать какие-либо библиотечные функции, кроме printf, и это школьное задание, поэтому постарайтесь не давать слишком много спойлеров и не делать это за меня. Нам дали одну подсказку, которая заключается в том, чтобы привести ваш Val к структуре. Но я теряюсь в этом. Спасибо
atoi
. 22.09.2017payload
. Эти данные приходят по сети? В этом случае это может быть не десятичная кодировка, а необработанный двоичный код. В этом случае стратегия парсинга будет совершенно другой. 22.09.2017unsigned short
. Вам необходимо уточнить это у вашего инструктора. Лучше попросите их предоставить образец ввода. 22.09.2017