我正在尝试使用以下方法将整数转换为二进制:
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/