C阵列没有保留值

时间:2017-06-20 15:19:51

标签: c arrays

我正在C中编写一个简单的Base64解码函数。当使用printf()调试行时,此函数的输出看起来是正确的(基于比较结果与现有工具):

unsigned char * b64decode(char *line)
{
    char *idx;
    unsigned char *decode;
    int i,j,len,dlen,hold = 0;

    idx  = strchr(line, '\n');        //index of newline
    len  = idx - line;                //lenght of string
    dlen = 3 * (len / 4);             //decoded length

    decode = malloc((sizeof(unsigned char) * dlen) + 1);
    pad = 0;

    for (i = 0; i <= len; i++) {      //deindex from ASCII
        line[i] = deindex(line[i]);
    }

    for(i = 0, j = u0; i < len; i++,j++) { 
        hold |= (line[i] << 18);  
        hold |= (line[++i] << 12);
        hold |= (line[++i] << 6);
        hold |= line[++i];

        decode[j] = hold >> 16;
        printf("%d ", decode[j]);
        decode[++j] = (hold >> 8) & 0xFF;
        printf("%d ", decode[j]);
        decode[++j] = hold & 0xFF;
        printf("%d ", decode[j]);

    hold = 0;
    }

    if (pad)                          //terminate before padding
        decode[dlen - pad] = '\0';

    return decode;

}

产生(部分)输出:

29 66 31 77 11 15 2 31 79 19 78 60 26 105 101 31 73 28 14 78 19 1 11 7 
78 27 1 22 69 54 0 30 1 73 100 32 84 29 29 67 51 83 78 101 82 6 0 71 84
28 13 69 77 7 4 12 83 18 60 12 30 8 73 26 9 17 79 20 76 33 26 71 43 0 5
29 71 89 17 4 9 0 100 38 7 83 0 55 22 6 12 26 23 65 29 1 82 84 48 95 0 32
19 10 5 71 79 18 72 8 69 78 101

当我尝试使用那些printf()行退出for循环后尝试访问此数组时出现问题。这个for循环(最大i值是任意的)......

for (i = 0; i < 100; i++) {
    printf("%d ", decode[i]);
}

生成此输出...

29 66 31 77 11 15 2 31 79 19 78 60 26 105 101 31 73 28 14 78 19 1 11 7 78
27 1 22 69 54 0 30 1 73 100 32 84 29 29 67 51 83 78 101 82 6 0 71 84 28 
13 69 77 7 4 12 83 18 60 12 30 8 73 26 9 17 79 20 76 33 26 71 43 0 5 29
71 89 17 4 9 0 100 38 7 83 0 55 22 6 12 26 23 65 29 1 82 84 48 95 0 32 19
10 5 71 79 168 187 158 23 131 127 0 0 168 187 158 23 131 127 0 0 0 0 0 0
0 0 0 0 65 0 0 0 0 0 0 0 88 187 158 23 131 127 0 0 88 187 158 23 131 127
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0
0 0 0 0 0 0 16 16 0 0 0 0 0 0 72 85 73 102

有谁能让我知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

好的伙计们,发现了这个问题。这里显示的函数有效,问题结果是在处理我上面的函数的函数中使用了一个realloc()调用错误解码。修复这个产生了正确的结果。

猜猜这是提供更多背景的快速教训!