如此dbg调试日志中所示,在intToBinary(num1,string1)函数调用之后打印string1 = '0' <repeats 28 times>, "1000"
。但随后在下一条指令中调用intToBinary(num2,string2)。如您所见,不同的参数传递给intToBinary函数。第二次使用不同的变量调用函数时,变量string1
如何受到影响?在日志中,它表示第一个字符从0变为\
(或\0
?)。
这是必要时功能的pastebin。 http://pastebin.com/EsQNMjej
void intToBinary(int num, char* string)
{
string[32] = '\0';
int i,j;
int temp = num;
// is num negative?
int isNegative = num < 0 ? 1 : 0;
//negate all bits and add 1 (two complements)
if(isNegative)
{
temp = -1 * temp; //absolute value
//In order to get the negative number in
// 2's complement you can either negate and
// increment, or decrement by 1 and negate.
//In this function, temp gets negated after
//the conversion to string
--temp;
}
//Write binary of positive num to string
for(i = 0, j = 31; i < 32; i++,j--)
{
if(pow(2,j) <= temp)
{
//Temp is decreased when the bit is 1
temp = temp - pow(2, j);
string[i] = '1';
}
else
{
//Nothing happens to temp when the bit is 0
string[i] = '0';
}
}
if(isNegative)
{
for(i = 0; i < 32; i++)
{
//negate bits
string[i] = string[i] == '1' ? '0' : '1';
}
}
}
我只是不知道这里发生了什么。我尝试切换两个函数调用的顺序,因此它已更改为以下
intToBinary(num2, string2);
intToBinary(num1, string1);
奇迹般地,第一个字节保持'0'
,这就是我想要的。但现在我只是想知道为什么这一改变首先......
答案 0 :(得分:2)
您尝试以32个字节存储32位二进制数;你忘了为null终止符分配一个额外的字节。当在string2
之后写入null时,它会破坏string1
的开头。
未定义的行为(在数组末尾写入)会导致未定义的结果。