Ошибка сегментации при использовании побитовых операторов - PullRequest
0 голосов
/ 15 января 2019

В настоящее время я работаю над проектом на C, который возьмет два 8-битных двоичных числа и преобразует их в десятичные значения. Я хорошо разбираюсь в побитовых операторах C и в том, как они обрабатывают числа, мой вопрос связан с синтаксисом.

Банкомат Моя программа очень проста:

int main() {
  char *inp1;
  char *inp2;
  unsigned long binNum1;
  unsigned long binNum2;

  printf("Enter the first binary number: "); 
  scanf("%s", inp1); 
  printf("Enter the second binary number: "); 
  scanf("%s", inp2); 

  binNum1 = strtoul(inp1, NULL, 2);
  binNum2 = strtoul(inp1, NULL, 2);

  unsigned long orVal = binNum1 | binNum2;
  unsigned long andVal = binNum1 & binNum2;
  unsigned long exclVal = binNum1 ^ binNum2;

  printf("Your or value is: %lu", orVal);
  printf("Your and value is: %lu", andVal);
  printf("Your exclusive value is: %lu", exclVal);

  return 0;
}

По сути, я просто хочу получить значение ORing, ANDing и EXCLing двух десятичных значений каждого двоичного числа. Тем не менее, я получаю ошибку сегментации при запуске этого. Я уверен, что это связано с синтаксисом, но я не могу найти много онлайн для такого рода проблемы.

1 Ответ

0 голосов
/ 15 января 2019

с этими строками

char *inp1;
char *inp2;
...
scanf("%s", inp1);
scanf("%s", inp2);

Вы не назначили никакой памяти для inp1 или inp2. Указатели неинициализированы , и это вероятная причина сегфоута.

Чтобы упростить это, вы можете сделать это так:

char inp1[100];
printf("Enter the first binary number: "); 
if(scanf("%99s", inp1) != 1) {
    return 1;
}

и аналогично для inp2.

...