为什么在 b[i]=c 哪里就卡住了

int main()
{
int a,c;
int b[100];
int i;

while (/*rewind(stdin), */scanf("%d", &a) != EOF) {
    if (1 == a) {
        printf("1\n");
    }
    else {
        for (i = 0; a = 1;i++) {
            c = a % 2;
            b[i] = c;   //0x00D219C7 处(位于 4.进制转换.exe 中)引发的异常: 0xC0000005: 写入位置 0x00500000 时发生访问冲突。

            a /= 2;
        }
        b[i] = 1;
        printf("%d", b[i]);
        printf("\n");
    }
    
}

}

for (i = 0; a = 1;i++) a=1; 是赋值语句,这里本应该是判断语句,这样就死循环了。看代码的功能,这句应改为:for (i = 0; a != 0;i++) ,整体修改如下,供参考:

#include<stdio.h>
int main()
{
    int a,c;
    int b[100];
    int i;
    while (/*rewind(stdin), */scanf("%d", &a) != EOF) {
        if (1 == a) {
            printf("1\n");
        }
        else {
            for (i = 0; a != 0;i++) {
                 c = a % 2;
                 b[i] = c;
                 a /= 2;
            }
            while(i--){  //输出二进制数
                 //b[i] = 1;
                 printf("%d", b[i]);
            }
            printf("\n");
        }
    }
}

因这数组溢出了。你的循环输入,最终会超出数组长度。你的for不会结束,没有结束条件