使用按位运算符时出现分段错误

0 c binary bit-manipulation decimal

我目前正在搞一个 C 项目,它将接收两个 8 位二进制数并将它们转换为十进制值。我对 C 中的按位运算符以及它们如何处理数字有很好的理解,我的问题是围绕语法的问题。

ATM我的程序很简单:

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;
}
Run Code Online (Sandbox Code Playgroud)

本质上,我只想获取每个二进制数的两个十进制值的“或”、“与”和“排除”的值。但是,当我运行它时,我遇到了分段错误。我很确定这是由于语法造成的,但我在网上找不到太多关于此类问题的信息。

Wea*_*ane 5

有了这些线

char *inp1;
char *inp2;
...
scanf("%s", inp1);
scanf("%s", inp2);
Run Code Online (Sandbox Code Playgroud)

您尚未向inp1或分配任何内存inp2。指针未初始化,这可能是段错误的原因。

为了简化它,你可以这样做:

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

类似地对于inp2.