首页 > 解决方案 > 为什么在 C 中显示数组时会发生此错误?

问题描述

我正在做的是输入一个类型为'unsigned long long'的数字,然后将其转换为二进制形式并以16位数字显示。

这是我的代码和结果。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

char D_PAN_ID[16];
char D_ADDRESS[16];
char S_PAN_ID[16];
char S_ADDRESS[16];

int main()
{
int bit1, bit2, bit3, bit4, k1, k2, k3, k4;
unsigned long long dec = 5;
/*
printf("8바이트 정수를 이진수로 변환\n");
scanf("%llu", &dec);
*/
printf("%llu 를(을) 이진수로 변환하면:\n", dec);

for (bit1 = 63; bit1 >= 48; bit1--)
{
    k1 = dec >> bit1;

    if (k1 & 1) {
        D_PAN_ID[63 - bit1] = '1';
        printf(&D_PAN_ID[63 - bit1]);
    }
    else {
        D_PAN_ID[63 - bit1] = '0';
        printf(&D_PAN_ID[63 - bit1]);
    }
}

printf("\n\n");

for (bit2 = 47; bit2 >= 32; bit2--)
{
    k2 = dec >> bit2;

    if (k2 & 1) {
        D_ADDRESS[47 - bit2] = '1';
        printf(&D_ADDRESS[47 - bit2]);
    }
    else {
        D_ADDRESS[47 - bit2] = '0';
        printf(&D_ADDRESS[47 - bit2]);
    }
}

printf("\n\n");

for (bit3 = 31; bit3 >= 16; bit3--)
{
    k3 = dec >> bit3;

    if (k3 & 1) {
        S_PAN_ID[31 - bit3] = '1';
        printf(&S_PAN_ID[31 - bit3]);
    }
    else {
        S_PAN_ID[31 - bit3] = '0';
        printf(&S_PAN_ID[31 - bit3]);
    }
}

printf("\n\n");

for (bit4 = 15; bit4 >= 0; bit4--)
{
    k4 = dec >> bit4;

    if (k4 & 1) {
        S_ADDRESS[15 - bit4] = '1';
        printf(&S_ADDRESS[15 - bit4]);
    }
    else {
        S_ADDRESS[15 - bit4] = '0';
        printf(&S_ADDRESS[15 - bit4]);
    }
}

return 0;
}

我得到的是这个。我认为自从打印第二个结果以来,它在后面添加了较高的结果。像这样:

result1

result2 + result1

result3 + result1 + result2

result4 + result1 + result2 + result3

输出

我如何修复它以显示

000000000000

000000000000

000000000000

000000000101

标签: arrayscoutputsyntax-error

解决方案


推荐阅读