2D 字符数组在构建时看起来不错,但后来变成了一个大的串联混乱



值期间一切看起来都不错,但是当我在外面访问结果时,我得到了所有数组元素的串联。

#include<string.h>
#include<fcntl.h>
#include<stdio.h>
int sqr(int r)
{
        int i,temp=1;
        for(i=0;i<r;i++)
        {
                temp*=2;
        }
        return temp;
}
char arrbin[20][8];
void  toBinary(int ascii)
{
        int i,j,len=0,tascii=ascii;
        char binary[8]={""};
        strcpy(binary,"");
        while(1)
        {
                int bit=ascii%2;
                char bit1[2];
                snprintf(bit1,sizeof(bit1),"%d",bit);
                strcat(binary,bit1);
                if(ascii!=1)
                        ascii=ascii/2;
                if(ascii==1)
                        break;
        }
        if(tascii!=1)
                strcat(binary,"1");
        len=strlen(binary);
        for(i=0;i<(8-len);i++)
        {
                strcat(binary,"0");
        }
        printf("n%s",binary);
        strcpy(arrbin[tascii-1],binary);
        strcat(arrbin[tascii-1],"");
}
}
void toBin(int bits)
{
        int i;
        for(i=0;i<bits;i++)
        {
                toBinary(i+1);
        }
}
void disp(int bits)
{
        int i;
        printf("n%d:",bits);
        for(i=0;i<bits;i++)
                printf("nn%s",arrbin[i]);
                //hear print all element concat and return output
}
int main()
{
        char bin[100]={""},arr[100];
        int r=0;
        int val[10];
        int m;//length
        int temp=0;//for the assign value to  position
        int i,j,bits;//how many box are there
        system("clear");
        printf("Enter Binary:");
        scanf("%s",bin);
        m=strlen(bin);
        while((m+r+1)>sqr(r))
        {
                r++;
        }
        bits=m+r;
        printf("m:%dnr:%d n-----nbits=%dn",m,r,bits);
        for(i=0;i<r;i++)
                val[i]=sqr(i);
        for(i=0;i<bits;i++)
        {
                for(j=0;j<r;j++)
                {
                        if((i+1)==val[j])
                        {
                                arr[i]='r';
                  break;
                        }
                }
                if(arr[i]!='r')
                        arr[i]=bin[temp++];
        }
        toBin(bits);
        disp(bits);
        for(i=0;i<bits;i++)
                printf("%c ",arr[i]);
        getchar();
        return 0;
}   

当我在toBinary()中构建数组时,一切看起来都不错。但后来在disp()所有二维数组打印输出,如

输出:

Enter Binary:1001001001001
m:13
r:5
-----
bits=18
100000000
010000000
110000000
001000000
101000000
011000000
111000000
000100000
100100000
010100000
110100000
001100000
101100000
011100000
111100000
000010000
100010000
010010000
18
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
01000000110000000010000010100000011000001110000000010000100100000101000011010000001100001011000001110000111100000000100010001000010010000
r r 1 r 0 0 1 r 0 0 1 0 0 1 0 r 0 1 

可能出了什么问题?

您忘记用 字节终止各个条目。

字符串是由第一个零代码(写入"\0"并对应于 ASCII 空字符)终止的连续代码单元序列。

(来源:维基百科)

在构建数组时,这无关紧要,因为您始终只打印最后一个元素。

另一个错误:disp()中的arrbin[1]可能应该arrbin[i]

提示:在寻找错误时,首先尝试减少问题。

您可能还想阅读:http://en.wikipedia.org/wiki/Off-by-one_error

最新更新