c - 分段故障;尝试在 C 中将 int 转换为二进制

标签 c arrays binary syntax-error

我正在尝试使用以下方法将整数转换为二进制:

int * intToBinary(int i) {
//return value
   int binary[] = {'\0'};
   int index = 0;

   for (int x = i; x != 0; x /= 2) {
       binary[index] = x%2;
       index++;
   }   

   return binary;
}

这个想法是我将反转数组(因为这将是正确的答案)并且我将获得转换。我已经尝试在 Python 中执行此操作并且效果非常好。

问题:当我运行上述方法时,我收到 Segmentation Failure: 11 错误。我知道如果我使用超出数组索引的 int 通常会发生这种情况,但这看起来不是问题。有谁知道为什么我不断收到此错误?

最佳答案

存在两个问题,都会导致未定义的行为

第一个是返回一个指向本地数组binary的指针。一旦函数返回,该数组将不再存在,留下一个流浪指针。但这可能不是导致崩溃的原因。

崩溃的最可能原因是数组binary只有一个元素。这意味着您的循环将超出其范围。对于 32 位整数,它需要包含 32 个元素。

第二个问题很容易解决,只需设置正确的大小即可。第一个问题有点难,但我的建议是您在调用函数中创建数组,并将其作为参数传递。

关于c - 分段故障;尝试在 C 中将 int 转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45017380/

相关文章:

python - 二进制转十进制(数学方式)

c++ - 将 1 添加到 32 位的位集中

c - 从文件中读取数字(整数)并将其存储为二维数组

c - 没有得到想要的输出。逻辑上是否有本质上的错误?

C: 'else' 当条件满足时执行 - 结构

c++ - 二维数组加法

arrays - 如何使用 MATLAB 返回包含 list1 和 list2 中的元素的列表

C++ 求数组中数字的平均值

javascript - 为新数组赋值

c - 将数据设置到nodePtr而不覆盖