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

时间:2019-01-15 00:17:42

标签: 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;
}

基本上,我只想获取ORing,ANDing和EXCLing每个二进制数的两个十进制值的值。但是,运行此命令时出现分段错误。我很确定这是由于语法的原因,但是对于这种类型的问题,我在网上找不到很多。

1 个答案:

答案 0 :(得分:4)

使用这些行

class CategoryRequests(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
...

    class CategoryRequests_Vote(models.Model):
        voter = models.ForeignKey(User, on_delete=models.CASCADE)
        voted = models.ForeignKey(CategoryRequests, on_delete=models.CASCADE)
        published_date = models.DateField(auto_now_add=True, null=True)

        class Meta:
            unique_together = ('voter', 'voted')

        def publish(self):
            self.published_date = timezone.now()
            self.save()

您尚未为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; } 同样。