C - 使用循环和索引填充char * ---不工作

时间:2013-05-14 02:53:32

标签: c string loops indexing char

这段代码是将十进制数转换为二进制数的函数的一部分,将它放在char instBin [33]的特定索引中,该索引由调用函数创建并通过引用传递。它传递十进制数,即您想要的二进制数字的数量(将额外的0加到给定的二进制数的前面)。我已经习惯了这一段时间了,我无法让它将0和1放入数组中。我已经把它一直到了实现instBin [i] ='1';只是根本不工作 - 当我打印instBin时,什么也没发生。我看过其他做这种事情的例子,但看起来在选择索引时给一个字符数组一个变量应该有用......任何想法为什么我的不是?

int printBin(int num, int numBits, int startIndex, char * instBin){
    int r, i; /* r for remainder, i for index */
const int FAIL = 0;
i = startIndex + numBits; /* start indexing at end of current segment */
while (num > 0)
{
    /* as long as i >= startIndex, we can still add to array */
    if (i >= startIndex){
        r = num % 2; /* find the remainder */
        if (r == 1)
            instBin[i] = '1';
        else /* r == 0 */
            instBin[i] = '0';
        num /= 2; /* then actually divide the number */
        i--;
    }
    else /* num is too big to fit in given number of bits */
    return FAIL;
}
/* return the 1 for success*/
return 1;
}

1 个答案:

答案 0 :(得分:0)

有两个主要问题。第一个是fencepost错误。假设您的意图是将最重要的位置于startIndex的缓冲区中,您需要从i = startIndex + numBits - 1开始。如果您需要说服这一点,请考虑使用numBits = 1的示例。

第二个问题是,当数字足够小以至于需要前导零时,你的循环不提供它们。它一次提供一位数,直到数字达到0,然后停止。在主循环之后需要第二个循环,以添加零。如果你在主循环之后查看i的值,它会告诉你主循环停止的位置,所以你可以像这样完成这个工作:

while(i >= startIndex)
    instBin[i--] = '0';