Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分段断层;尝试在C中将int转换为二进制_C_Arrays_Binary_Syntax Error - Fatal编程技术网

分段断层;尝试在C中将int转换为二进制

分段断层;尝试在C中将int转换为二进制,c,arrays,binary,syntax-error,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; } 我的想法是反转数组(因为这是正确的答案),然后得到转换。我已

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

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来做这件事了,效果很好

问题是:当我运行上述方法时,我得到一个
分段错误:11
错误。我知道如果我使用的int超出数组的索引,通常会发生这种情况,但这看起来不是问题所在。有人知道我为什么老是犯这个错误吗

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

第一个是返回一个指向本地数组
binary
的指针。一旦函数返回,该数组将不再存在,留下一个错误的指针。不过,这可能不是造成这次事故的原因

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


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

您希望
int binary[]={'\0'}有多大未来?a)您需要为“二进制”数组分配空间。b) 您无法返回堆栈分配变量的地址。这还不是全部,此本地数组只有1个元素,因此在函数执行期间(越界访问)ub已经存在。如果您正在生成字符串,则还有一些其他问题:1)
x%2
应该是
(x%2)?'1':“0”
。2) 您需要向其附加NUL(
'\0'
)。3) 您正在以与通常相反的顺序存储位。数组不会在
c
中动态调整大小。您首先需要使用所需的大小声明它们,或者在运行时使用
malloc
和friends分配内存。