【发布时间】:2019-06-09 00:07:45
【问题描述】:
我目前正在处理 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 的值。但是,当我运行它时出现分段错误。我很确定这是由于语法造成的,但我在网上找不到很多此类问题。
【问题讨论】:
-
换句话说,
inp1和inp2在您尝试使用它们之前指向哪些有效内存?也许char inp1[65]; (64+1 字节的存储空间)? -
binNum2 = strtoul(inp1, NULL, 2);,大概你希望这实际上是binNum2 = strtoul(inp2, NULL, 2);..? -
@David C. Rankin 你和另一个回答关于分配内存的人是正确的。我也感谢您昨天对我以前的一些帖子的回答!
-
很高兴它有帮助。我们将把你变成一个程序员呢。去重新审视我的答案并查看验证。对于简短的示例,它们似乎是不必要的工作,但尽早养成良好习惯可以避免以后的未定义行为......了解如何验证代码中的每个关键步骤是编程的基础。
标签: c binary bit-manipulation decimal