未完全填充的数组大小

时间:2014-01-28 06:03:28

标签: c arrays

我已编写此代码以从文件中获取值将其转换为二进制并打印出其二进制数具有多少位。但我错了

#include<stdio.h>
#include<stdlib.h>


int main()
{
FILE *p1;
p1=fopen("InputFile.txt","w");
int t=10,bin[30],i;
unsigned int a;
int *bi;
while(t--)
{
    printf("Enter a Number : ");
    scanf("%u",&a);
    fprintf(p1,"%u\n",a);
}
t=10;
fclose(p1);
p1=fopen("InputFile.txt","r");
while(t--)
{
    fscanf(p1,"%u",&a);
    for(i=0 ; a>0 ; a=a/2 , i++)
    {
        bin[i]=a%2;
    }
    for(i=size;i>=0;i--)
    printf("%d",bin[i]);
    printf("\n");
    printf("%lu\n",sizeof(bin)/sizeof(int));
}

return 0;
}

这会产生错误的输出。实际上,它给出了阵列的最大尺寸。

我可以打印i作为二进制数的大小。但是在计算是否有多少值传递到大尺寸数组时是否有任何预定义函数?

1 个答案:

答案 0 :(得分:0)

不,SizeOf将始终为您提供分配给变量/内存结构的内存总量。您必须自己跟踪已写入bin[30]阵列的数据量。你可以通过保留一个计数器并在for循环中递增它来做到这一点:

for(i=0 ; a>0 ; a=a/2 , i++)
{
    bin[i]=a%2;
}